没有调用Socket.IO客户端事件处理程序?

时间:2017-09-11 18:47:15

标签: socket.io

我是最近开始使用Socket.IO的iOS开发人员。在我的iOS应用程序的生命周期中,我的服务器将从我的应用程序接收作为客户端的消息,但对于一个特定情况,服务器还需要从Web浏览器接收作为客户端的消息。我正在测试一个非常基本的浏览器UI,其中包括一个文本字段和一个按钮,点击该按钮时,需要将一个数字代码(在文本字段中输入)发送到服务器。这是看起来像:

<form>
  Code:<br>
  <input type="text" id="code" name="code"><br>
  <input type="submit" id="validatebutton" value="Validate">
  <script src="/socket.io-client/dist/socket.io.js"></script>
  <script>
    document.getElementById("validatebutton").onclick = function() {
      var socket = io('http://localhost:3000');
      socket.on('connect', function(clientSocket) {
        clientSocket.emit('validateCode', document.getElementById("code"));
      });
    };
  </script>
</form>

连接正常。当我运行此代码时,客户端成功连接到侦听套接字服务器。唯一的问题是没有执行事件处理程序。我可能非常离开这里,但我要去的是一个客户端事件处理程序,它包含在Swift SDK中:

self.socket.on(clientEvent: .connect, callback: { (data:[Any], ack:SocketAckEmitter) in
    // Do something here
})
self.socket.connect()

我只是假设Javascript客户端也有一个客户端事件处理程序(名为'connect'),客户端在连接服务器时会收到该处理程序。就像我说的,我可能会离开这里。我只是关注他们网站上发布的Socket.IO文档,它告诉我这样做。如果有人可以告诉我我错过了什么,或者我做错了什么,我将不胜感激。抱歉所有的noobishness,但我真的不知道还有什么地方可以转,因为官方文档很模糊,Stack上的另一个问题对我来说有点太高级了。

1 个答案:

答案 0 :(得分:0)

我不会将emit函数放在connect中。尝试在您的客户端中发出如下所示的内容

  <script>
    var socket = io('http://localhost:3000');
    document.getElementById("validatebutton").onclick = function() {
       socket.emit('validateCode', document.getElementById("code"));
    };
  </script>

你的点击事件可能正在执行,但是发出不是因为它被包裹在connect函数中(只有当套接字连接到服务器时才执行)

此外,我会将JavaScript放在自己的文件中,但就目前而言,至少在表单(不在其中)之后才能正常工作。