socket踩坑實錄

socket簡述

socket(雙工協議)
網絡中的兩個程序,經過一個雙向的鏈接來實現數據的交換,咱們把鏈接的一端稱爲socket

圖片描述

socket特性

自帶鏈接保持

能夠實現雙向通訊

socket分類

基於TCP的socket

基於UDP的socket

基於RawIP的socket

基於鏈路層的socket

socket實戰

socketClient.jsweb

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.jswebsocket

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.jssocket

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

相關文章
相關標籤/搜索