服务器通过广播与客户端交互

 

思路是这样:首先客户端通过提交表单发送一条信息给服务端,然后服务端再广播给除发送信息的所有客户端。

好,先从服务器开始:
var http=require('http');
var fs=require('fs');
var server=http.createServer(function(req,res){
    
  fs.readFile('./index.html',function(error,data){
  res.writeHead(200,{'Content-Type':'text/html'});
  res.end(data,'utf-8');

});
   
}).listen(3000,"127.0.0.1");
console.log("server running at http://127.0.0.1:3000");

var socket=require('socket.io').listen(server);
socket.sockets.on('connection',function(socket){
   socket.on('message',function(data){
   socket.broadcast.emit('push message',data);
  });
});

客户端的需求有:
1)提交表单给服务器
2)监听推送事件
3)捕捉数据
4)将数据写入页面

<!DOCTYPE html>
<html>
  <head>
     <meta charset="utf-8" />
     <title>socket.io.example</title>
  </head>
  <body>
     <h1>socket.test<h1>
     <form id="messageId" action="#">
        <textarea id="message" rows="4" cols="3"></textarea>
        <input type="submit" value="send message"></input>
     </form>

     <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
     <script src="/socket.io/socket.io.js"></script>
     <script>
        var socket=io.connect('http://127.0.0.1:3000');
        var message=document.getElementById('message');
        $(messageId).submit(function(){
   
          socket.emit('message',{text:message.value});
          return false;
        });
        socket.on('push message',function(data){

            $('form').after('<p>'+data.text+'<p>');
        });
     </script>
  </body>
 
</html>


package.json
{
  "name":"socket-test",
  "version":"0.1.0",
  "private":"true",
  "dependencies":{"socket.io":"0.8.7"}
}

哈哈,代码上完了。调试过程中有点疑问:为什么发送信息给服务器的客户端收不到服务器的广播信息呢?服务器广播信息使用的是broadcast.emit()方法,之前的实例使用broadcast.emit()方法的时候,测试时所有的客户端都可以收的到信息的。哈哈,不科学啊。之后问了在社区里面交流。得知这是nodejs的一种内置机制。说服务器知道是哪个客户端发送过来的信息,所以没有广播给相应的客户端了。哈哈,看完这答复,直接跪了。那么强悍。现在也只能这样纸说了。

 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值