【发布时间】:2019-09-17 22:34:25
【问题描述】:
我是 websockets 的新手,刚刚在我的应用程序中获得了一个有效的 websocket 连接。我试图让服务器每分钟在数据库中检查一次以查找即将到来的锦标赛,并且对于连接到从该分钟开始的锦标赛中注册的 websocket 的每个玩家,发送一条消息,表明 ID 为 xxxxx 的锦标赛现在开始。我有以下
比赛/consumers.py:
from channels.generic.websocket import WebsocketConsumer
import json
class TournamentLobbyConsumer(WebsocketConsumer):
def connect(self):
self.accept()
def disconnect(self, close_code):
pass
def receive(self, text_data):
text_data_json = json.loads(text_data)
message = text_data_json['message']
print("The websocket received a message: '%s'" % message)
比赛/routing.py:
from django.conf.urls import url
from . import consumers
websocket_urlpatterns = [
url('ws/tournaments/$', consumers.TournamentLobbyConsumer),
]
比赛/模板/index.html:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<title>Tournament Lobby</title>
</head>
<script>
var chatSocket = new WebSocket(
'ws://' + window.location.host +
'/ws/tournaments/');
chatSocket.onmessage = function(e) {
// var data = JSON.parse(e.data);
// var message = data['message'];
alert("message received from websocket")
};
chatSocket.onclose = function(e) {
console.error('Chat socket closed unexpectedly');
};
</script>
{% if tournaments %}
<ul>
{% for tournament in tournaments %}
<li><a href="{% url 'tournament_detail' tournament.id %}"> {{ tournament.name }} {{ tournament.start_time }}</a></li>
{% endfor %}
</ul>
{% else %}
<p>No tournaments are available</p>
{% endif %}
</html>
当我进入这个锦标赛大厅时,我在服务器上收到一条消息,说发生了“websocket 握手”。所以 websocket 连接正在工作。我现在对如何在正在运行的服务器上运行一个循环感到困惑,该循环每分钟检查一次新锦标赛,然后将消息发送到这些连接的客户端。我做的教程只展示了一个服务器响应客户端请求,但是一个 websocket 应该能够在任何一个方向上。
【问题讨论】:
标签: django websocket django-channels