Socket.io Emit 不起作用

Posted

技术标签:

【中文标题】Socket.io Emit 不起作用【英文标题】:Socket.io Emit doesn't work 【发布时间】:2019-01-03 12:30:07 【问题描述】:

我是 NodeJS 的新手,我刚开始使用 Express 和 Socket.io 创建一个简单的聊天应用程序,但是“消息”发出部分不起作用(socket.on('connect') 有效!)。警报“OK”工作正常,但 console.log 什么也没做。

这是我的代码:

App.js

var express = require('express');
var app = express();
var server = require('http').createServer(app);
var io = require('socket.io')(server);


app.get('/', function(req, res,next) 
    res.sendFile(__dirname + '/index.html');
);

app.get('/test', function(req, res,next) 
    res.render('HALLO ');
);

server.listen(4200);

io.on('connection', function(client) 
   // var address = io.handshake.address;
    console.log('Ein neuer Client hat sich zum Chat verbunden! IP: ')
);



io.on('sendmsg', function(data) 
    console.log(data);
);

索引.html

<script src="/socket.io/socket.io.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.4/jquery.min.js"></script>

<script>
    var socket = io.connect('http://localhost:4200');

    function sendMsg()
        alert("OK");
        socket.emit('sendmsg', document.getElementById("text").value);
    
</script>
<h2>Awesome Chat by Simon</h2>
<br>
    <input type="text" id="text">
    <input type="button" onclick="sendMsg()" value="Senden">

【问题讨论】:

也许这里的例子可以提供帮助:gist.github.com/jeffdonthemic/87b542cc09864fe203f4 【参考方案1】:

您收听个人socket。将您的听众从io 移动到client

io.on('connection', function(client) 
   // var address = io.handshake.address;
    console.log('Ein neuer Client hat sich zum Chat verbunden! IP: ')

    client.on('sendmsg', function(data) 
        console.log(data);
    );
);

【讨论】:

【参考方案2】:

你应该像这样在connection 函数中移动你的处理程序:

io.on('connection', function(client) 
   // var address = io.handshake.address;
    console.log('Ein neuer Client hat sich zum Chat verbunden! IP: ');
    client.on('sendmsg', function(data)  // Move this part inside the connection function
      console.log(data);
    );
);

【讨论】:

【参考方案3】:

事件在套接字 (client) 上触发,而不是在服务器上:

io.on('connection', function(client) 
   // var address = io.handshake.address;
   console.log('Ein neuer Client hat sich zum Chat verbunden! IP: ');
   client.on("sendmsg", console.log);
);

【讨论】:

【参考方案4】:

尝试这样做。

io.on('connection', function(client) 
    console.log('Ein neuer Client hat sich zum Chat verbunden! IP: ')

    client.on('sendmsg', function(data) 
        console.log(data);
    );
);

【讨论】:

以上是关于Socket.io Emit 不起作用的主要内容,如果未能解决你的问题,请参考以下文章

当存储在变量中时,Socket.io 发射到 socket.id 不起作用

socket.io 连接事件不起作用,为啥?

socket.io:为啥这个广播语句不起作用?

socket.join 不起作用(socket.io)

socket.io 发射在 socket.on 中不起作用

来自 socket.io 的新 cookie 值不起作用?