socket(雙工協議)
網絡中的兩個程序,經過一個雙向的鏈接來實現數據的交換,咱們把鏈接的一端稱爲socket
socketClient.js
web
var net = require('net'); var hostname = '127.0.0.1'; var port = 9000; var client = new net.Socket(); client.setEncoding('utf-8'); // 與服務端創建鏈接 client.connect(port,hostname,function() { client.write('你好啊'); }) client.on('data',function(data) { // console.log(data); say() }) // 逐行讀取 const readline = require('readline'); // 創建通訊標準 var r1 = readline.createInterface({ input:process.stdin, //input標準 output:process.stdout //out 標準 }) function say(){ r1.question('請輸入:',function(inputStr) { if(inputStr === 'bye') { client.destroy() console.log('客戶端的socket退出') } else { client.write(inputStr + '\n') } }) }
socketServer.js
websocket
var net = require('net'); var clientServer = net.createServer(); var clientMap = new Object; // 加一個標識 var i = 0; // 接收客戶端的鏈接 clientServer.on('connection',function(client) { console.log('親 客戶端發送過來一條信息'); client.name = i++; clientMap[client.name] = client; client.on("data",function(data) { console.log(`客戶端傳來${data}`) client.write('服務端發送再見') broadcast(data,client) }) }) function broadcast(data,client){ for (key in clientMap) { clientMap[key].write(client.name+"說:"+data) } } clientServer.listen(9000);
websocketClient.js
網絡
var ws = new WebSocket('ws://127.0.0.1:3000'); // 初始化 ws.onopen = function(){ ws.send('你好哇') } ws.onmessage = function(event) { var chatRoom = document.getElementById('chatRoom'); chatRoom.innerHTML += '<br />' + event.data; }
websocketServer.js
socket
var WebsocketServer = require('ws').Server; var wss = new WebsocketServer({ port: 3000 }) var clientMap = new Object; var i = 0; wss.on('connection',function(client) { console.log('親,服務端發送過來一條信息'); client.on('message',function(data) { client.name = i++; clientMap[client.name] = client; broadcast(data,client) }) }) function broadcast(data,client) { for (key in clientMap) { clientMap[key].send(client.name+'說:'+data) } }
文章持續更新中~~~~ui