【问题标题】:Keep track of the messages sent on a socket, socket.io跟踪在套接字 socket.io 上发送的消息
【发布时间】:2012-11-08 23:22:57
【问题描述】:

我正在开发与 django.socketio 的聊天。我想跟踪在套接字上发送的消息,以便在新用户到来时呈现它。我想让他看到在他到达之前发送的消息。

我的代码很简单:

模板:

      <script>
      var url = window.location.pathname.split('/');
      var id = url[3];
      var socket = new io.Socket();
      socket.connect();
      socket.on('connect', function(context){
      socket.subscribe('channel-' + id)  
      });


      socket.on('message', function(data){
      $('.try').prepend('<div> '+val+' </div>');
       });


    function send(){
    var val = $('#text').val();
    data = val
    socket.send(data);
   };
    </script>

html:

  <form id="form" onsubmit="send(); return false">
  <input type="text" id="text">
  <input type="submit" value="Send">
  </form>

  <div class="try"> </div>

events.py:

  @events.on_message(channel='^channel-')
    def messages(request, socket, context, message):
    socket.send_and_broadcast_channel(message)

在这个简单的聊天中,使用不同的频道,我想跟踪发送的消息(针对每个频道)并在用户第一次连接时呈现。

我正在寻找有关如何做到这一点的提示。

非常感谢。

【问题讨论】:

  • 不过你应该升级到 gevent-socketio.. 我认为 django-socketio 已被弃用,取而代之的是前者

标签: django sockets websocket socket.io gevent


【解决方案1】:

只需为消息创建一个表,并确保其中一列是聊天室名称或 ID,这样您就可以查询订阅聊天室的最后 10 条消息。

所以在渲染页面时,你会从数据库中获取最后一条消息,而下一条则来自套接字。

如果您不想长时间保存消息,只需定期截断表以进行清理。

【讨论】:

  • 好的,谢谢您的回答。我想知道对于那种任务我是否必须使用特定的数据库。如果有很多消息,你认为我可以用 MySq 做到这一点吗?
  • 我不认为消息的数量应该是决定数据库选择的最重要因素。最重要的是您将使用数据库执行哪些其他任务以及其他数据库技术人员可以提供什么。但仅出于这个目的,它们中的任何一个都足够好。
猜你喜欢
  • 2014-12-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-28
  • 2012-12-13
相关资源
最近更新 更多