我试图在socket.io google小组上问这个问题,但是没有人可以(或者不想)帮助我。
我在服务器端有这段代码:
var chat = io
.of('/chat')
.on('connection', function (socket) {
socket.emit('message', {
that: 'only'
, '/chat': 'will get'
});
});
chat.on("message", function(data){
console.log(data);
});
在客户端,我有这个代码:
var chat = io.connect('http://localhost/chat');
chat.on('message', function (data) {
chat.emit('hi!');
});
chat.emit("message", {"this": "is a message"});
在控制台上,我可以看到来自服务器的第一条消息已发送,但似乎客户端一旦连接并收到消息,就不会发出'hi!'
消息。此外,我希望客户端也发出另一条消息,即我粘贴的最后一行。服务器也没有收到此消息(理论上应该记录它)。
我肯定做错了什么,有人能指出这到底发生了什么? 我最终想要实现的只是建立一个简单的聊天系统,但我希望这些东西(频道)在实际编写聊天之前工作。感谢
答案 0 :(得分:1)
我把它贬了一下,但是:
服务器:
var io = require('socket.io').listen(8080);
var chat = io
.of('/chat')
.on('connection', function (socket) {
socket.send('welcome to the interwebs');
socket.on('message', function(data) {
console.log(data);
});
});
客户端:
<html>
<body>
<script src="http://10.120.28.201:8080/socket.io/socket.io.js"></script>
<script type="text/javascript">
var chat = io.connect('http://10.120.28.201:8080/chat');
chat.on('connect', function () {
console.log("connected");
chat.send('hi!');
chat.on('message', function (data) {
console.log(data);
});
});
</script>
</body>
</html>
答案 1 :(得分:1)
不发送“hi”的原因是因为.emit
中的第一个参数是事件名称,在这里,它是“hi”。从技术上讲,如果你在服务器端执行以下操作,我认为你应该得到一个未定义的数据(因为你没有把任何东西作为要发送的对象的第二个参数):
.on('hi',function(data){
console.log(data) // should log "undefined"
});
您还可以使用类似于Web套接字语义的{{1}},并发送到.send
事件。如果您在客户端将message
更改为.emit
,则应该可以正常工作。
总结:
.send
工作客户端代码:
.emit('eventName', 'data') // sends to the eventName name
.send('data') // sends to message event