socket.io实现了一个简单的聊天

时间:2011-10-14 15:56:33

标签: node.js socket.io

我试图在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!'消息。此外,我希望客户端也发出另一条消息,即我粘贴的最后一行。服务器也没有收到此消息(理论上应该记录它)。

我肯定做错了什么,有人能指出这到底发生了什么? 我最终想要实现的只是建立一个简单的聊天系统,但我希望这些东西(频道)在实际编写聊天之前工作。感谢

2 个答案:

答案 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