socket io 前后端样例

        Socket.IO是一个用于实现实时双向通信的库,最初是为Node.js开发的,用于解决WebSocket在不同浏览器和网络环境中的兼容性问题。它提供了一个统一的API,使得开发者可以轻松实现实时双向通信,而不必担心底层传输协议的差异。目前,Socket.IO不仅支持Node.js,还扩展到了Python、Java、.NET等多种编程语言和平台。

Socket.IO主要由服务器端和客户端两部分组成:

  1. Socket.IO Server:在服务器端运行,处理客户端连接、消息传递和事件管理。
  2. Socket.IO Client:在客户端运行,负责建立连接、发送和接收消息。服务器和客户端通过Socket.IO协议进行通信,底层使用WebSocket或其他回退传输机制。

Socket.IO常用于以下场景:

  1. 实时聊天应用:如在线客服、聊天室等,消息能够即时到达客户端。
  2. 实时数据推送:如股票价格更新、体育比赛实时比分等应用。
  3. 多人协作应用:如多人在线编辑、协作工具等。
  4. 实时游戏:多人在线游戏,尤其是需要实时交互的场景。

后端python:

import socketio

class ChatServer:
    def __init__(self):
        # 创建Socket.IO服务器实例
        self.sio = socketio.Server(cors_allowed_origins='*')
        self.app = socketio.WSGIApp(self.sio)

        # 注册事件处理
        self.sio.on('connect', self.handle_connect)
        self.sio.on('disconnect', self.handle_disconnect)
        self.sio.on('chat_message', self.handle_message)

    def handle_connect(self, sid, environ):
        print(f"用户 {sid} 已连接")
        self.sio.emit('chat_message', {'user': '系统', 'message': f'用户 {sid} 已加入聊天'}, room=sid)

    def handle_disconnect(self, sid):
        print(f"用户 {sid} 已断开连接")
        self.sio.emit('chat_message', {'user': '系统', 'message': f'用户 {sid} 已离开聊天'})

    def handle_message(self, sid, data):
        print(f"用户 {sid} 发送消息: {data['message']}")
        # 广播消息给所有用户
        self.sio.emit('chat_message', {'user': sid, 'message': data['message']})

    def run(self, host='0.0.0.0', port=4800):
        import eventlet
        eventlet.wsgi.server(eventlet.listen((host, port)), self.app)

# 启动服务器
if __name__ == '__main__':
    server = ChatServer()
    server.run()

前端:

<script src="https://cdn.socket.io/4.0.0/socket.io.min.js"></script>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Socket.IO 聊天室</title>
</head>
<body>
    <h1>聊天室</h1>
    <div id="messages"></div>
    <input id="message_input" placeholder="输入消息...">
    <button onclick="sendMessage()">发送</button>

    <script>
        const socket = io('http://localhost:4800');

        // 接收消息并展示
        socket.on('chat_message', function(data) {
            const messageDiv = document.getElementById('messages');
            const newMessage = document.createElement('p');
            newMessage.textContent = `${data.user}: ${data.message}`;
            messageDiv.appendChild(newMessage);
        });

        // 发送消息
        function sendMessage() {
            const input = document.getElementById('message_input');
            socket.emit('chat_message', {message: input.value});
            input.value = '';
        }
    </script>
</body>
</html>

使用Node.js和Socket.IO进行前后端通信可以实现实时的双向通信。下面是一个简单的示,演示了如何在Node.js中使用Socket.IO前端建立连接和传递消息: 1. 安装Socket.IO: 在你的Node.js项目中,使用以下命令安装Socket.IO: ``` npm install socket.io ``` 2. 在Node.js中创建服务器: 在你的Node.js应用中,创建一个服务器,并将Socket.IO与之关联: ```javascript const app = require('express')(); const server = require('http').createServer(app); const io = require('socket.io')(server); // 监听连接事件 io.on('connection', (socket) => { console.log('A user connected'); // 监听客户端发送的消息 socket.on('message', (data) => { console.log('Received message:', data); // 可以在这里处理收到的消息,并将回复发送给客户端 socket.emit('reply', 'Hello from server'); }); // 监听断开连接事件 socket.on('disconnect', () => { console.log('A user disconnected'); }); }); // 启动服务器 server.listen(3000, () => { console.log('Server is running on port 3000'); }); ``` 3. 前端连接到服务器: 在前端HTML文件中,使用以下代码连接到服务器并发送/接收消息: ```html <script src="/socket.io/socket.io.js"></script> <script> const socket = io(); // 监听连接成功事件 socket.on('connect', () => { console.log('Connected to server'); // 发送消息给服务器 socket.emit('message', 'Hello from client'); }); // 监听服务器回复消息事件 socket.on('reply', (data) => { console.log('Received reply:', data); }); </script> ``` 以上示中,当客户端连接到服务器时,会打印出连接成功的消息。然后,客户端会发送一条消息给服务器,并打印出服务器回复的消息。 你可以根据实际需求在服务器和客户端之间传递更多的消息和数据。Socket.IO提供了丰富的API和事件来简化实时通信的开发
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值