首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用Socket.IO-Client-Swift和Swift,服务器上的Sails.js订阅房间(套接字)的问题

使用Socket.IO-Client-Swift和Swift,服务器上的Sails.js订阅房间(套接字)的问题
EN

Stack Overflow用户
提问于 2017-10-01 17:25:07
回答 2查看 1.6K关注 0票数 2

在斯威夫特,我用

代码语言:javascript
运行
复制
socket.on("test") {data, ack in
    print(data)
}

以便在我的Sails.js API上订阅一个房间(套接字)。

当我从服务器广播一条消息时,

代码语言:javascript
运行
复制
sails.sockets.broadcast('test', { text : 'ok' })

从来不调用socket.on处理程序。但是,如果我在连接socket.io客户端时将"log“设置为TRUE,在Socket-IO日志中,消息就会到达。

怎么了?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-10-02 09:48:38

最后,我发现了我的错误:

我所做的整个过程都是正确的:(加入房间的请求由服务器使用sails.sockets.join完成)

使用带有socket.on参数的ROOM NAME是错误的。

对于其他有同样问题的人,我会解释得更好:

  1. 从Swift,您应该通过向服务器上接受websocket请求的端点发出websocket请求(GET、POST、PUT)进行订阅。例如,您可以发出POST请求,将房间名称传入主体。 socket.emitWithAck("post","room":"testroom","url":“/api/v1.0/Server订阅”).timingOut(后){打印中的数据(“服务器响应(数据)”)}
  2. 在服务器端,在房间订阅端点中,您应该有以下代码: roomSubscribing:函数(req,res) { if (!req.isSocket) {返回res.badRequest();} sails.sockets.join(req,req.params('room'),函数(err) { if (Err){返回res.serverError(err);} });}
  3. 当服务器想要向“试验室”的订阅者广播某些数据时,必须使用以下代码: sails.sockets.broadcast('testroom',{ message:'testmessage‘}

现在在斯威夫特这边,你必须使用:

代码语言:javascript
运行
复制
socket.on("message") { data, ack in
    print(data)
}

才能让消息处理程序正常工作。我认为您应该使用房间名称,而应该使用您在服务器中广播数据时使用的键/值条目的键(在本例中是"message")。

票数 4
EN

Stack Overflow用户

发布于 2017-10-02 00:42:56

我在套接字方面的经验不多,但万一没人接.

我认为您遗漏了三步套接字过程中的第一步:

  1. 客户端向服务器发送一条消息,请求订阅特定的房间。
  2. 客户端设置一个socket.on来处理来自该房间的特定事件。
  3. 服务器在特定的房间中广播事件。对于该特定事件,所有具有.on的订阅者/客户端都会做出反应。

我可能错了,但从你的描述听起来你好像错过了第一步。您的客户端必须使用io.socket发送一条消息,类似于这里,然后服务器必须使用套接字请求让它们加入房间,类似于示例这里中的内容。

(在没有socket.on触发的情况下,日志数据的存在似乎证实了事件是在房间中广播的,但该客户端没有订阅)

祝好运!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46514939

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档