Node.js + Socket.ioでクライアントからemitできない
Socket.ioで双方向通信のWebアプリを開発中です。
現在、サーバ側からのemitはできるのですが、クライアントからのemitが送信できない状態です。
server.js
var fs = require('fs'),
socketio = require('socket.io'),
path = require('path');
var server = require('http').createServer();
server.on('request', doRequest);
server.listen(1234);
var io = socketio.listen(server);
io.sockets.on('connection', function(socket) {
socket.emit('connect');
socket.on('msg', function(data) {
console.log(data);
});
});
function doRequest(req, res) {
switch(path.extname(req.url)) {
case '':
fs.readFile('./index.html', 'UTF-8',
function (err, data) {
res.writeHead(200, {'Content-Type': 'text/html'});
res.write(data);
res.end();
}
);
break;
case '.css':
fs.readFile('.'+req.url, 'UTF-8',
function (err, data) {
res.writeHead(200, {'Content-Type': 'text/css'});
res.write(data);
res.end();
}
);
break;
case '.js':
fs.readFile('.'+req.url, 'UTF-8',
function (err, data) {
res.writeHead(200, {'Content-Type': 'application/javascript'});
res.write(data);
res.end();
}
);
break;
}
}
index.html
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="content-type" content="text/html">
<meta charset="UTF-8">
<title>chat</title>
<link rel="stylesheet" type="text/css" href="style.css">
<script src="/socket.io/socket.io.js"></script>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<script>
var socket = io.connect('http://localhost:1234');
socket.on('connect', function() {
socket.emit('msg', 'connect!');
console.log('connect!');
});
function send() {
var msg = $('#msg').val();
$('#msg').val('');
socket.emit('msg', msg);
}
</script>
</head>
<body>
<form>
<textarea id="msg" rows="4" cols="50"></textarea>
<button type="button" onclick="send()">送信</button>
</form>
<div id="container">
</div>
</body>
</html>
index.html読み込み時、サーバ側からのemitによってクライアント側の以下のイベントが発火します。
socket.on('connect', function() {
socket.emit('msg', 'connect!');
console.log('connect!');
});
Chromeのコンソールには「connect!」と表示されますが、同関数内のsocket.emitは実行されず、サーバ側でlistenしている
socket.on('msg', function(data) {
console.log(data);
});
こちらのイベントが発火しません。
また、textareaに文字を入力して送信ボタンを押しても、同様にsend()関数のsocket.emit部分のみ実行できていないです。
どうすればよいでしょうか。
Nodeのバージョンはv0.10.25です。よろしくお願いします。