nodejs之socket的使用(net模块)、socket.io模块

参考:http://nodejs.cn/api/net.html

w3school的socket.io:https://www.w3cschool.cn/socket/

文本socket:https://www.w3cschool.cn/websocket_protocol/qn6p1ozt.html

在NodeJS中有三种socket:1. TCP,2. UDP,3. Unix域套接字

net 模块提供了创建基于流的 TCP 或 IPC 服务器(net.createServer())和客户端(net.createConnection()) 的异步网络 API

====================net模块实现socket==============

***********app.js**********

var express = require('express');
var app = express();//创建express实例
var routes=require('./routes/routes.js');//吧路由引入;  ./ 代表项目的当前总目录 /Users/wofu/Desktop/node
//***************
var net = require('net');
var HOST = '127.0.0.1';
var PORT = 8081;
// 创建一个TCP服务器实例,调用listen函数开始监听指定端口
// 传入net.createServer()的回调函数将作为”connection“事件的处理函数
// 在每一个“connection”事件中,该回调函数接收到的socket对象是唯一的
net.createServer(function(sock) {

    // 我们获得一个连接 - 该连接自动关联一个socket对象
    // 为这个socket实例添加一个"data"事件处理函数
    sock.on('data', function(data) {
      console.log('从客户端接受的数据: ' +
          data);
        // 回发该数据,客户端将收到来自服务端的数据
        sock.write('  向客户端回发数据 "' + data+ "\n");
        sock.end("关闭socket");//奖触发客户端和服务端的close事件监听
    });
    //数据错误事件
      sock.on('error',function(exception){
        console.log('服务端错误socket error:' + exception);
        sock.end();
      });
    // 为这个socket实例添加一个"close"事件处理函数
    sock.on('close', function(data) {
        console.log('服务端CLOSED: ');
    });

}).listen(PORT, HOST);
console.log('Server listening on ' + HOST +':'+ PORT);

//**************
routes.router(app);//调用路由
var server = app.listen(8081, function () {
  var host = server.address().address
  var port = server.address().port
  console.log(__dirname);//这里的目录就是/Users/wofu/Desktop/node,其中node文件夹我是直接放在了桌面
console.log(host);//主机地址
console.log(port);//端口号
  console.log("应用实例,访问地址为 http://%s:%s", host, port)

})

*************routes.js******************

var router = function(app){
  app.get('/one', function (req, res) {
    res.write("ddd");
    res.end();

  });


  var net = require('net');
  var port = 8081;
  var host = '127.0.0.1';
  var client = new net.Socket();
  //客户端连接
  client.connect(port, host, function() {
  //客户端向服务端socket发送数据
   client.write('向服务器发送数据I am Chuck Norris!');
  });

  // 为客户端添加“data”事件处理函数
  // data是服务器发回的数据
  client.on('data', function(data) {
  console.log("从服务器接受的数据"+data+"     \n");
  });

  // 为客户端添加“close”事件处理函数
  client.on('close', function() {
   console.log('客户端Connect closed');
  });
};
exports.router = router;

============socket.io实现socket通信=======

载入模块:npm install socket.io 

https://socket.io/get-started/chat/

github地址:https://github.com/socketio/socket.io/blob/master/docs/API.md

http://javacheng.oschina.io/socket.io/

主要应用到的函数有5个:

.on('connection', function(socket){ }):与客户端建立连接时监听。

.on('disconnect', function(){ }):与客户端断开连接时监听。

.on('event-name', function(data) { }):监听客户端发来的消息。

.broadcast.emit('event-name', { }):向除自己外的所有其他用户广播消息。

.emit('event-name', { }):仅向当前连接的客户端(自己)推送消息。

// 服务端
 // io.on(‘connection’,function(socket));//监听客户端连接,回调函数会传递本次连接的socket
 //
 // io.sockets.emit(‘String’,data);//给所有客户端广播消息
 //
 // io.sockets.socket(socketid).emit(‘String’, data);//给指定的客户端发送消息
 //
 // socket.on(‘String’,function(data));//监听客户端发送的信息
 //

 // socket.emit(‘String’, data);//给该socket的客户端发送消息


*************app.js*************创建服务端的socket

var express = require('express');
var app = express();//创建express实例
var routes=require('./routes/routes.js');//吧路由引入;  ./ 代表项目的当前总目录 /Users/wofu/Desktop/node
var http = require('http');
var server=http.createServer(app);
var io = require('socket.io').listen(server);//require(‘socket.io’).listen(server) 实际上这句就是讲socket的监听加入的app设置的http模块了
server.listen(8081);
io.sockets.on('connection', function (socket) {//io.sockets.on(‘connection’,function()…)监听连接后进行的处理,
  // 代码示例中,主要包含两件事,一个是向前端发送news的事件,一个是监听m事件。
  console.log("建立了连接");
    socket.emit('news', { hello: '服务端world' });//触发一个news事件
    socket.on('m', function (data) {//监听m事件
      console.log(data);
    });
});
 routes.router(app,io);//调用路由

************routes.js***********路由

var router = function(app,io){
  app.get('/one', function (req, res) {
    res.sendFile("/Users/wofu/Desktop/node/views/one.html");
    // res.write("ddd");
});
};

exports.router = router;

**********one.html**********客户端连接socket

<html>
  <head>
    <!-- 客户端一个引用了socket.io/socket.io.js的javscript库 -->
    <script src="socket.io/socket.io.js"></script>
  </head>
  <body>
    <div>This is our socket.html file</div>
    <script>
    var socket = io.connect('http://127.0.0.1:8081');//连接服务器(通过io.connect(‘http://localhost’)),然后服务器端io.sockets.on("connection",function(){})就监听到了
// on 函数用于绑定事件函数,emit 属性用于触发一个事件
    socket.on('news', function (data) {//  监听收到news的事件后,发送 m 事件
      console.log(data);
        socket.emit('m', { my: '客户端data' });//第一个参数是事件,第二个参数是监听m事件的回调函数的参数
      });
    </script>
  </body>
</html>


  • 5
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值