python3 的 websocket服务器坑(连接浏览器的websocket)【一】

这里先放一个python2的websocket【代码

我一开始以为随便改一下python2和python3的兼容就可以直接运行了。谁知道,人算不如天算天算,搞了我一天都没搞好。然后弃坑,不做伸手党,万事靠自己。当然有半天我跑去看辻本杏去了,说实话什么波姐,什么三上,什么julia,都不中我胃口,就譬如桃乃木什么的偏正常体型的才是正宗。

言归正传

好了言归正传,开起车来就要炸了。

python的 websockets模块(这个找了很久)

#安装
pip install websockets 
pip3 install websockets

英文文档的话真没有,别说什么中文文档了,对于我这新手来说只能github一波https://github.com/aaugustin/websockets/tree/master/example

好了,直接看例子算了

这个可以实现多人聊天,我就来改一改,这个是"conter.py"例子,html我就不放了,太简单了

#!/usr/bin/env python
# WS server example that synchronizes state across clients

import asyncio
import json
import logging
import websockets

logging.basicConfig()

STATE = {'value': 0}

USERS = set()

def state_event():
    return json.dumps({'type': 'state', **STATE})

def users_event():
    return json.dumps({'type': 'users', 'count': len(USERS)})

async def notify_state():
    if USERS:       # asyncio.wait doesn't accept an empty list
        message = state_event()
        await asyncio.wait([user.send(message) for user in USERS])

async def notify_users():
    if USERS:       # asyncio.wait doesn't accept an empty list
        message = users_event()
        await asyncio.wait([user.send(message) for user in USERS])

async def register(websocket):
    USERS.add(websocket)
    await notify_users()

async def unregister(websocket):
    USERS.remove(websocket)
    await notify_users()

async def counter(websocket, path):
    # register(websocket) sends user_event() to websocket
    await register(websocket)
    try:
        await websocket.send(state_event())
        async for message in websocket:
            data = json.loads(message)
            if data['action'] == 'minus':
                STATE['value'] -= 1
                await notify_state()
            elif data['action'] == 'plus':
                STATE['value'] += 1
                await notify_state()
            else:
                logging.error(
                    "unsupported event: {}", data)
    finally:
        await unregister(websocket)

asyncio.get_event_loop().run_until_complete(
    websockets.serve(counter, 'localhost', 6789))
asyncio.get_event_loop().run_forever()

 还是放吧,不然有一些比我还新手(如果下面评论有神马goeasy的推荐千万不要信,烧钱的东西,自己打个服务器才多少钱,还可以实现很多东西呢,它一年就收你几百几千的,鸭屎啦雷)

<!-- 请忽略我的html代码不正规 最重要快-->
<html>
	<textarea id="response"></textarea>
	<script>
		var ws = new WebSocket('ws://localhost:6789')
		ws.onopen=function () {
			console.log('open')
		}
		ws.onclose=function () {
			console.log('close')
		}
		ws.onmessage=function (e) {
			response.innerHTML += e.data + '\n\r'
		}
	</script>
</html>

 好了一切准备就绪

python运行这个文件python文件,连续开几个网页的时候另外一个网页的输入框会增加文字,你已经成功了!!!

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
### 回答1: Python可以使用多种库来搭建WebSocket服务器,其中比较常用的是Tornado和WebSocket库。以下是使用Tornado搭建WebSocket服务器的简单示例: 1. 安装Tornado库 ``` pip install tornado ``` 2. 编写WebSocket服务器代码 ```python import tornado.websocket import tornado.web import tornado.ioloop class WebSocketHandler(tornado.websocket.WebSocketHandler): def open(self): print("WebSocket opened") def on_message(self, message): print("Received message: {}".format(message)) self.write_message("You said: {}".format(message)) def on_close(self): print("WebSocket closed") app = tornado.web.Application([ (r"/websocket", WebSocketHandler), ]) if __name__ == "__main__": app.listen(8888) tornado.ioloop.IOLoop.current().start() ``` 3. 运行WebSocket服务器 ``` python server.py ``` 4. 在浏览器中测试WebSocket服务器浏览器中打开WebSocket客户端,连接到`ws://localhost:8888/websocket`,即可与WebSocket服务器进行通信。 ### 回答2: Python搭建WebSocket服务器,需要先理解WebSocket的基本概念和相关技术。WebSocket是一种基于TCP协议的全双工通信的网络协议,它允许Web应用程序在客户端与服务器之间建立持久性的连接。在WebSocket建立连接之后,客户端和服务器可以互相发送消息。相比较HTTP协议,WebSocket的实时性更高,特别适合一些需要实时推送数据的应用场景。 在Python中,可以通过Tornado、Twisted等框架来快速搭建WebSocket服务器。下面以Tornado为例,介绍一下如何搭建一个WebSocket服务器。 1. 安装Tornado 首先需要安装Tornado框架,可以通过pip命令进行安装,如下所示: ``` pip install tornado ``` 2. 编写WebSocket服务器代码 下面是一个简单的WebSocket服务器代码示例: ```python import tornado.websocket import tornado.web import tornado.ioloop class WebSocketHandler(tornado.websocket.WebSocketHandler): def open(self): print('WebSocket连接已打开') def on_message(self, message): print('收到客户端消息:{}'.format(message)) self.write_message('服务器已接收到消息:{}'.format(message)) def on_close(self): print('WebSocket连接已关闭') app = tornado.web.Application([(r'/ws', WebSocketHandler)]) if __name__ == '__main__': app.listen(8888) tornado.ioloop.IOLoop.instance().start() ``` 上述代码中,定义了一个WebSocketHandler类来处理WebSocket连接。在open方法中打印出WebSocket连接已打开的消息,在on_message方法中接收来自客户端的消息,并将消息打印出来并返回一个确认消息到客户端,在on_close方法中打印出WebSocket连接已关闭的消息。在WebSocket服务器启动时,将WebSocketHandler类添加到Tornado应用程序中,并绑定到指定的路由(本例中使用了/ws)上。 3. 运行WebSocket服务器 运行上述代码后,即可启动WebSocket服务器。可以使用任意的WebSocket客户端连接WebSocket服务器,测试服务器是否工作正常。 总结 通过Tornado框架,可以快速搭建WebSocket服务器,实现实时数据推送等功能。当然,真正的应用场景中,还需要考虑WebSocket的负载均衡,数据安全等一系列问题。因此,在实际的开发过程中,还需要更深入的学习和实践,来构建稳定、可靠的WebSocket服务器。 ### 回答3: WebSocket是一种开放的标准,它提供了一种浏览器服务器之间进行双向通信的方式。Python是一种强大的编程语言,它具有良好的数据处理和网络编程能力。因此,Python很适合用于搭建WebSocket服务器。 首先,我们需要使用Python的第三方库Tornado或者Twisted等来搭建WebSocket服务器。这里以Tornado为例简要介绍一下搭建步骤。 步骤一:创建一个Tornado应用 我们可以使用Tornado框架的Application类来创建一个应用。在这个应用中,我们需要定义WebSocket路由以及对应的处理函数。 ``` python import tornado.ioloop import tornado.web import tornado.websocket class WebSocketHandler(tornado.websocket.WebSocketHandler): def open(self): print('WebSocket opened') def on_message(self, message): print('Message received: {}'.format(message)) def on_close(self): print('WebSocket closed') def make_app(): return tornado.web.Application([ (r'/websocket', WebSocketHandler), ]) if __name__ == '__main__': app = make_app() app.listen(8080) tornado.ioloop.IOLoop.current().start() ``` 在上面的代码中,我们定义了一个WebSocketHandler类来处理WebSocket连接。在这个类中,我们重载了WebSocketHandler的三个方法:open、on_message、on_close。这三个方法分别用于处理WebSocket连接建立,消息接收和连接关闭事件。 在make_app函数中,我们定义了路由,并将WebSocketHandler绑定到了路由上。我们通过调用app.listen方法来启动应用,使用IOLoop.current().start函数来启动事件循环。 步骤二:使用JavaScript创建WebSocket客户端 为了与服务器进行通信,我们需要使用JavaScript创建WebSocket客户端。这里我们通过浏览器提供的WebSocket API来创建客户端。 ``` javascript let socket = new WebSocket('ws://localhost:8080/websocket') socket.onopen = function () { console.log('WebSocket opened') } socket.onmessage = function (event) { console.log('Message received:', event.data) } socket.onclose = function () { console.log('WebSocket closed') } ``` 在这段代码中,我们使用浏览器提供的WebSocket构造函数来创建一个WebSocket客户端。我们将服务器的地址ws://localhost:8080/websocket传递给构造函数,这里的地址与在Python Web服务器中创建的WebSocket路由匹配。随后,我们在onopen,onmessage和onclose三个事件处理函数中定义了相应的逻辑。当WebSocket连接建立,消息接收或连接关闭时会分别触发这三个事件,并执行相应的逻辑。 到此,我们已经完成了基本的搭建过程,可以通过浏览器控制台的输出,观察WebSocket连接和消息的收发。 总结 在本文中,我们使用Python的Tornado框架来搭建了一个简单的WebSocket服务器,并通过使用浏览器提供的WebSocket API,创建了一个WebSocket客户端。WebSocket服务器提供了浏览器服务器之间进行实时双向通信的方式,这种通信方式可以用于很多场景,比如实时游戏、即时聊天、在线会议等。通过Python搭建WebSocket服务器,可以使我们更加灵活地开发和管理这些应用程序。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值