WebSocket服务端的详细阐述

WebSocket是一种在单个 TCP 连接上进行全双工通信的协议。 它使得实时和异步应用程序成为可能。WebSocket最初是通过浏览器使用的,但现在它也被应用于服务器端。在本文中,我们将重点介绍WebSocket服务端方面的内容。

一、WebSocket服务端工具

WebSocket服务端的工具有多种选择,比如PHP、Node.js等。这些工具都提供了WebSocket的库和API。例如,Node.js的库“ws”可以轻松地创建WebSocket服务器。这是一份使用Node.js的代码示例:

const WebSocket = require('ws');
const server = new WebSocket.Server({ port: 8080 });

server.on('connection', (ws) => {
  ws.send('Hello, client!');
  
  ws.on('message', (message) => {
    console.log(`Received message: ${message}`);
  });
});

这个代码片段创建了一个WebSocket服务器,并在客户端连接时向客户端发送一条消息。当客户端发送消息时,它将被打印到控制台上。

二、WebSocket服务端路径错误

WebSocket服务端的路径是一个非常重要的问题。如果路径错误,客户端就无法连接到服务器。默认的路径是“/”。如果需要修改路径,需要在服务器上设置。以下是一个使用PHP创建WebSocket服务器的示例:

$server = new swoole_websocket_server('127.0.0.1', 9501);
$server->on('open', function (swoole_websocket_server $server, $request) {
    echo "server: handshake success with fd{$request->fd}\n";
});

$server->on('message', function (swoole_websocket_server $server, $frame) {
    echo "receive from {$frame->fd}:{$frame->data},opcode:{$frame->opcode},fin:{$frame->finish}\n";
    $server->push($frame->fd, "this is server");
});

$server->on('close', function ($ser, $fd) {
    echo "client {$fd} closed\n";
});

$server->start();

为了修改路径,可以在“new swoole_websocket_server()”中传递参数来添加路径。例如,可以使用“$server = new swoole_websocket_server(‘127.0.0.1’, 9501, SWOOLE_PROCESS, SWOOLE_SOCK_TCP | SWOOLE_SSL);”来指定路径为“127.0.0.1:9501”。

三、WebSocket服务端加密

WebSocket通过TLS / SSL保护客户端和服务器之间的通信。它使用Secure Sockets Layer(SSL)或TLS(Transport Layer Security)来加密数据并确保数据不被劫持。以下是一个使用Node.js的示例:

const https = require('https');
const WebSocket = require('ws');
const fs = require('fs');

const server = https.createServer({
    cert: fs.readFileSync(''),
    key: fs.readFileSync('')
});

const wss = new WebSocket.Server({ server });

wss.on('connection', (ws) => {
  ws.send('Hello, client!');

  ws.on('message', (message) => {
    console.log(`Received message: ${message}`);
  });
});

server.listen(8080);

在这个例子中,我们先创建了一个使用HTTPS协议的服务器,然后创建了一个WebSocket服务器。我们使用了TLS / SSL保护数据。

四、WebSocket服务器

WebSocket服务器是可以让客户端和服务器之间进行实时通信的服务。WebSocket服务器可以使用不同的编程语言来实现。这个例子使用Python创建服务器:

#!/usr/bin/env python

import asyncio
import websockets

async def hello(websocket, path):
    name = await websocket.recv()
    print(f" {greeting}")

start_server = websockets.serve(hello, "localhost", 8765)

asyncio.get_event_loop().run_until_complete(start_server)
asyncio.get_event_loop().run_forever()

这个例子创建了一个WebSocket服务器,当客户端连接时,它会发送一条问候消息并等待客户端的响应。然后,它会将收到的响应打印到控制台上。

五、WebSocket服务端搭建

我们可以使用不同的编程语言来搭建WebSocket服务端。以下是一个使用Java的例子:

@ServerEndpoint("/echo")
public class EchoServer {

    @OnOpen
    public void onOpen(Session session) {
        System.out.println("onOpen");
        try {
            session.getBasicRemote().sendText("Hello, client!");
        } catch (IOException ex) {
            ex.printStackTrace();
        }
    }

    @OnMessage
    public void onMessage(Session session, String message) {
        System.out.println("onMessage: " + message);
    }

    @OnClose
    public void onClose(Session session) {
        System.out.println("onClose");
    }
}

这个例子使用Java的WebSocket API来搭建服务端。服务端接收到一个连接请求时,会向客户端发出问候消息,并等待客户端的响应。一旦收到响应,就会将其打印到控制台上。

六、WebSocket服务端设置

为了使WebSocket服务器正常工作,我们需要设置一些参数。以下是一个使用Python的示例:

#!/usr/bin/env python

import asyncio
import websockets
import ssl

ssl_context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
ssl_context.load_cert_chain('', '')

async def hello(websocket, path):
    name = await websocket.recv()
    print(f" {greeting}")

start_server = websockets.serve(hello, "localhost", 8765, ssl=ssl_context)

asyncio.get_event_loop().run_until_complete(start_server)
asyncio.get_event_loop().run_forever()

在这个例子中,我们使用Python的“ssl”模块来设置SSL上下文。我们还使用了用户名和密码来保护WebSocket服务器。

七、WebSocket服务端和客户端

为了测试WebSocket服务器,我们需要编写WebSocket客户端。以下是一个使用Java的WebSocket客户端示例:

@ClientEndpoint
public class EchoClient {

    @OnOpen
    public void onOpen(Session session) {
        System.out.println("onOpen");
        try {
            session.getBasicRemote().sendText("Hello, server!");
        } catch (IOException ex) {
            ex.printStackTrace();
        }
    }

    @OnMessage
    public void onMessage(Session session, String message) {
        System.out.println("onMessage: " + message);
    }

    @OnClose
    public void onClose(Session session) {
        System.out.println("onClose");
    }
}

这个例子创建了一个WebSocket客户端,当它连接到服务器时,它会向服务器发送一条问候消息,并等待服务器的响应。一旦收到响应,就会将其打印到控制台上。

八、WebSocket服务端什么协议

WebSocket使用HTTP / 1.1协议升级到WebSocket协议。这个过程被称为“握手”,它允许客户端和服务器协商WebSocket支持。以下是一个使用Node.js的示例:

const http = require('http');
const WebSocket = require('ws');
const fs = require('fs');

const server = http.createServer((req, res) => {
  res.writeHead(200, { 'Content-Type': 'text/plain' });
  res.end('Hello, World!');
});

const wss = new WebSocket.Server({ server });

wss.on('connection', (ws) => {
  ws.send('Hello, client!');

  ws.on('message', (message) => {
    console.log(`Received message: ${message}`);
  });
});

server.listen(8080);

这个例子创建了一个HTTP服务器。当客户端连接时,它会向客户端发送一条问候消息,并等待客户端的响应。然后,它会将收到的响应打印到控制台上。

九、WebSocket服务端接收消息

WebSocket服务器可以接收来自客户端的消息。以下是一个使用PHP创建WebSocket服务器的示例:

$server = new swoole_websocket_server('127.0.0.1', 9501);
$server->on('open', function (swoole_websocket_server $server, $request) {
    echo "server: handshake success with fd{$request->fd}\n";
});

$server->on('message', function (swoole_websocket_server $server, $frame) {
    echo "receive from {$frame->fd}:{$frame->data},opcode:{$frame->opcode},fin:{$frame->finish}\n";
    $server->push($frame->fd, "this is server");
});

$server->on('close', function ($ser, $fd) {
    echo "client {$fd} closed\n";
});

$server->start();

在这个例子中,当客户端发送消息时,服务端会接收到并输出到控制台上。

十、WebSocket服务端主动断开连接

WebSocket服务器可以在需要时关闭连接。以下是一个使用Node.js的示例:

const WebSocket = require('ws');
const server = new WebSocket.Server({ port: 8080 });

server.on('connection', (ws) => {
  ws.send('Hello, client!');

  setTimeout(() => {
      ws.close();
  }, 5000);
  
  ws.on('message', (message) => {
    console.log(`Received message: ${message}`);
  });
});

在这个例子中,WebSocket服务器从客户端接受一条消息,然后等待5秒钟后关闭连接。

原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/151714.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝小蓝
上一篇 2024-11-11 13:43
下一篇 2024-11-11 13:44

相关推荐

  • Boost Websocket Send用法介绍

    本文将详细阐述Boost Websocket Send的相关内容,包括Boost Websocket Send的概念、使用方法、功能特点等,以便读者深入了解和使用。 一、概述 Bo…

    编程 2025-04-27
  • index.html怎么打开 – 详细解析

    一、index.html怎么打开看 1、如果你已经拥有了index.html文件,那么你可以直接使用任何一个现代浏览器打开index.html文件,比如Google Chrome、…

    编程 2025-04-25
  • Resetful API的详细阐述

    一、Resetful API简介 Resetful(REpresentational State Transfer)是一种基于HTTP协议的Web API设计风格,它是一种轻量级的…

    编程 2025-04-25
  • AXI DMA的详细阐述

    一、AXI DMA概述 AXI DMA是指Advanced eXtensible Interface Direct Memory Access,是Xilinx公司提供的基于AMBA…

    编程 2025-04-25
  • 关键路径的详细阐述

    关键路径是项目管理中非常重要的一个概念,它通常指的是项目中最长的一条路径,它决定了整个项目的完成时间。在这篇文章中,我们将从多个方面对关键路径做详细的阐述。 一、概念 关键路径是指…

    编程 2025-04-25
  • neo4j菜鸟教程详细阐述

    一、neo4j介绍 neo4j是一种图形数据库,以实现高效的图操作为设计目标。neo4j使用图形模型来存储数据,数据的表述方式类似于实际世界中的网络。neo4j具有高效的读和写操作…

    编程 2025-04-25
  • c++ explicit的详细阐述

    一、explicit的作用 在C++中,explicit关键字可以在构造函数声明前加上,防止编译器进行自动类型转换,强制要求调用者必须强制类型转换才能调用该函数,避免了将一个参数类…

    编程 2025-04-25
  • Unity WebSocket详解

    一、WebSocket简介 WebSocket是一种在单个TCP连接上进行全双工通信的网络协议。WebSocket使用标准的HTTP端口(80)或安全端口(443),与HTTP协议…

    编程 2025-04-25
  • HTMLButton属性及其详细阐述

    一、button属性介绍 button属性是HTML5新增的属性,表示指定文本框拥有可供点击的按钮。该属性包括以下几个取值: 按钮文本 提交 重置 其中,type属性表示按钮类型,…

    编程 2025-04-25
  • crontab测试的详细阐述

    一、crontab的概念 1、crontab是什么:crontab是linux操作系统中实现定时任务的程序,它能够定时执行与系统预设时间相符的指定任务。 2、crontab的使用场…

    编程 2025-04-25

发表回复

登录后才能评论