【发布时间】:2020-08-09 02:52:52
【问题描述】:
我有一个用 python 编写的 websocket 服务器脚本(使用 Flask 和 socketIO)。 当我在计算机上本地运行脚本时,我可以使用“websocket tester app”轻松地从手机连接到套接字。
但是当我在我的 ubuntu 服务器(数字海洋云)上部署相同的脚本时,我无法连接到它!
我正在使用 docker 部署它,这里是我使用的“docker 脚本”:
docker build -t websocketserver .
docker run -d -p 5080:8080 --restart always --name my_second_docker_running websocketserver
我正在运行这个命令来检查是否有错误:
docker logs --tail 500 my_second_docker_running
但一切似乎都很好,但仍然......
有人知道是什么问题吗?
如果需要(我不这么认为),那么这里是我的 python 脚本:
from aiohttp import web
import socketio
import aiohttp_cors
import asyncio
import asyncio as aio
import logging
# creates a new Async Socket IO Server
sio = socketio.AsyncServer()
# Creates
app = web.Application()
sio.attach(app)
# AIOSerial now logs! uncomment below for debugging
logging.basicConfig(level=logging.DEBUG)
async def index(request):
with open('index.html') as f:
print("Somebody entered the server from the browser!")
return web.Response(text=f.read(), content_type='text/html')
@sio.on("android-device")
async def message(sid, data):
print("message: ", data)
@sio.on("device-id")
async def message(sid, android_device_id):
print("DEVICE ID: ", android_device_id)
@sio.on("disconnected-from-socket")
async def message(sid, disconnected_device):
print("Message from client: ", disconnected_device)
@sio.on('sendTextToServer')
async def message(sid, data):
print("message: " , data)
if data == "hei":
await sio.emit("ServerMessage", {"Message from server:": "du skrev hei? Da skriver jeg hei tilbake!"})
if data == "lol":
await sio.emit("ServerMessage", {"Message from server:": "hehe, funny right?.."})
else:
await sio.emit("ServerMessage", {"Message from server:": "Hello There!"})
async def send_message_to_client():
print("this method got called!")
await sio.emit("SuperSpecialMessage", {"Message from server:": "MESSAGE FROM SENSOR"})
# We bind our aiohttp endpoint to our app
# router
cors = aiohttp_cors.setup(app)
app.router.add_get('/', index)
# We kick off our server
if __name__ == '__main__':
print("websocket server is running!")
the_asyncio_loop = asyncio.get_event_loop()
run_the_websocket = asyncio.gather(web.run_app(app))
run_both_loops_together = asyncio.gather(run_the_websocket)
results = the_asyncio_loop.run_until_complete(run_both_loops_together)
有人可以帮我吗?
【问题讨论】:
-
您是否通过设置VPC在您的云上打开了端口?
-
我需要这样做吗?我可以从外部连接到我的数据库和 apache 服务器,那我为什么需要这样做呢?
-
云可以通过默认过滤某些端口来保护您免受攻击。
标签: python linux docker websocket