我即使使用the Socket.io official chat sample也遇到此问题。
我在AWS上设置了这个。我只能收到成功连接的'终端上的消息但不是消息:....'。即使使用Google Dev Tool,我也无法看到任何相关错误。有人可以帮忙吗?
这是客户端javascript代码:
<script src="https://cdn.socket.io/socket.io-1.3.4.js"></script>
<script src="http://code.jquery.com/jquery-1.11.1.js"></script>
<script>
var socket = io();
$('form').submit(function(){
socket.emit('chat message', $('#m').val());
$('#m').val('');
return false;
});
</script>
然后服务器端node.js代码:
var app = require('express')();
var http = require('http').Server(app);
var io = require('socket.io')(http);
app.get('/', function(req, res){
res.sendfile('index.html');
});
http.listen(8989, function(){
console.log('listening on *:8989');
});
io.on('connection', function(socket){
console.log('successfully connected');
socket.on('chat message', function(msg){
console.log('message: ' + msg);
});
});
答案 0 :(得分:0)
按钮点击没有表单提交,表单提交也会创建大量的页面刷新和所有内容,而且你也不需要这个练习的表单
创建一个函数sendMessage()
<script>
var socket = io();
function sendMessage(){
socket.emit('chat message', $('#m').val());
$('#m').val('');
}
</script>
在您的HTML删除表单中添加onclick到按钮
<body>
<ul id="messages"></ul>
<input id="m" autocomplete="off" /><button onclick="sendMessage()">Send</button>
</body>
答案 1 :(得分:0)
原来问题出在客户端javascript代码上。
我提到this sample code并发现在socket.io官方网站上它说在某些情况下(Express 3/4或框架)你需要使用io.connect()而不是io()。然而,在我之前的案例中,它对我有用。
以下是更改后的代码:
var socket = io.connect();
$('form').submit(function(){
socket.emit('chat message', $('#m').val());
$('#m').val('');
return false;
});