我是node.js/socket的新手。Io/websocket和我试图创建一个网络聊天应用程序。目前我被困在一个问题上几天:无论我多么努力,我都不能通过websocket使浏览器/服务器通信。
我的服务器代码:
var express = require("express");
var app = express();
var port = 3700;
var io = require('socket.io').listen(app.listen(port));
console.log("Listening on port " + port);
io.sockets.on('connection', function (socket) {
console.log("connect");
socket.emit('globalmessage', { message: 'welcome to the chat !' });
socket.on('send', function (data) {
io.sockets.emit('message', data);
});
});
My Client code:
var messages = [];
var socket = io.connect('http://localhost:3700');
var field = document.getElementById("field");
var sendButton = document.getElementById("send");
var content = document.getElementById("content");
var name = 'test';
var role = 1;
socket.on('message', function (data) {
if(data.message) {
messages.push(data);
var html = '';
for(var i=0; i<messages.length; i++) {
html += messages[i].message + '<br />';
}
content.innerHTML = html;
} else {
console.log("There is a problem:", data);
}
});
socket.on('globalmessage', function (data) {
content.innerHTML += data.message;
});
sendButton.onclick = function() {
var text = field.value;
socket.emit('send', { message: text, username: name, role: userrole});
};
当我启动node js服务器,并通过浏览器(chrome和firefox)转到客户端时,我在cmd窗口中得到了这些数据:
info - socket.io started
Listening on port 3700
debug - served static content /socket.io.js
debug - client authorized
info - handshake authorized 7492ni4I5TCkRNvfG8WU
debug - setting request GET /socket.io/1/websocket/7492ni4I5TC
debug - set heartbeat interval for client 7492ni4I5TCkRNvfG8WU
debug - client authorized for
debug - websocket writing 1::
connect
debug - websocket writing 5:::{"name":"globalmessage","args":[
come to the chat !"}]}
debug - emitting heartbeat for client 7492ni4I5TCkRNvfG8WU
debug - websocket writing 2::
debug - set heartbeat timeout for client 7492ni4I5TCkRNvfG8WU
正如你所看到的,有websocket写5:::{"name":"globalmessage","args":[欢迎来到聊天!"}]},这意味着服务器可以读取客户端连接时,并发出消息回客户端,但在客户端没有发生任何事情,我不能读取消息,事件根本没有被触发。当我尝试从客户端发送消息到服务器时,也没有发生任何事情。
在firebug控制台上,我看到有一个成功的请求地址
localhost: 3700/socket . io/1/?t = 1399976614584
with response 7492ni4I5TCkRNvfG8WU:60:60:websocket
如果我改变传输从websocket到xhr轮询一切工作完美,客户端可以接收服务器消息,可以发送回消息到服务器,所以我认为代码是好的(实际上我从http://code.tutsplus.com/tutorials/real-time-chat-with-nodejs-socketio-and-expressjs--net-31708复制了代码)。
所以你能帮我在我的本地websocket设置有什么问题吗?我不知道出了什么问题,因为一切工作与ajax轮询很好,我真的需要它与websocket代替工作。我所有的测试都是在我的本地完成的:windows 7 home premium, xampp 3.1.0 (websocket不工作,即使我关闭apache)
谢谢大家!
我以前在一个项目上使用过socket io,但我从来没有遇到过这个问题。我可以和你分享我所拥有的代码
var io = require('socket.io');
var io_connection = io.listen(server, {
origins: '*:*',
log: true,
'heartbeat timeout': 6000,
'close timeout': 6000,
'log level': 3,
'transports': [
'websocket',
'flashsocket',
'htmlfile',
'xhr-polling',
'jsonp-polling'
]
});
io_connection
.on('connection', function(socket) {
user(socket); // bind user socket connection
poll(socket); // bind user's socket to poll related sockets
});
return io;
希望有所帮助