Socket.io 客户端无法发出消息

Posted

技术标签:

【中文标题】Socket.io 客户端无法发出消息【英文标题】:Socket.io client cannot emit message 【发布时间】:2014-01-20 16:44:37 【问题描述】:

服务器:

var 
io=require('socket.io'),
express=require('express'),
UUID=require('node-uuid'),
path=require('path'),
app = express();

app.configure(function()
    app.use(express.static(path.join(__dirname,'')));
);

var server = require('http').createServer(app).listen(8080);
sio = io.listen(server);

app.get('/', function(req, res)
    res.sendfile('/index.html', root:__dirname);
);

sio.sockets.on('connection', function(socket)
    socket.userid = UUID();
    socket.on('message', function()
        console.log('client just sent something');
        socket.emit('news',  hello: 'world' );
    );
);

客户端首先连接index.html,然后点击一个href到gameroom.html。这是gameroom.html:

<html>
<head>
    <script src="/socket.io/socket.io.js"></script>
    <script type="text/javascript" src="game.room.js"></script>
    <script type="text/javascript" src="client.js"></script>
</head>
</html>

client.js:

window.onload = function()
    var game = new game_room();

game.room.js:

var game_room = function()
    this.socket = io.connect();

this.socket.on('connect', function()
    this.socket.emit('message', 'Hello server');
);

当客户端连接时,它应该发出消息并且服务器写入日志,但我没有得到任何日志。我在game.room.js中尝试了没有this.socket.on('connect')的代码,客户端可以发出消息,我得到了日志。另外,如果我将代码从 game.room.js 传输到 client.js,即在 window.onload 中,我创建了 var socket = io.connect() 和 socket.on('connect', function() socket.emit( '消息', '你好服务器'));它工作正常。

有人可以帮助我或解释发生了什么吗?谢谢。

【问题讨论】:

【参考方案1】:

你输了context你可以试试bind:

var game_room = function()
    this.socket = io.connect();


    this.socket.on('connect', function()
        this.socket.emit('message', 'Hello server');
    .bind(this));

或者您可以将this.socket 设置为某个本地变量:

var game_room = function()
    var socket = this.socket = io.connect();


    this.socket.on('connect', function()
        socket.emit('message', 'Hello server');
    );

【讨论】:

以上是关于Socket.io 客户端无法发出消息的主要内容,如果未能解决你的问题,请参考以下文章

socket.io 客户端未从服务器接收消息

python socket.io客户端无法接收广播消息

Socket.io - 无法从客户端发送消息到服务器端

socket.io 客户端到客户端消息传递

Node.js socket.io 没有响应 iOS socket.io 发出请求

反应本机套接字 io 没有从客户端发出事件