Node.js和socket.无法通过Websocket与服务器/客户端通信



我是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;

希望有所帮助

相关内容

  • 没有找到相关文章

最新更新