【发布时间】:2015-08-21 15:47:20
【问题描述】:
我一直在尝试在应用程序和我的服务器之间进行基本的通信,但无论我做什么,我似乎都无法让它工作。 下面是我的js代码
var app = require('express')();
var http = require('http').Server(app);
var io = require('socket.io')(http);
io.on('connection', function(socket){
console.log('a user connected');
io.emit("hello");
socket.on('disconnect', function() {
console.log('a user disconnected');
});
socket.on('response', function(message){
console.log(message);
});
});
http.listen(3000, function(){
console.log('listening on *:3000');
});
理论上应该在用户连接时发出警报,输出一条消息说用户已连接,然后发出一个事件“hello”
在断开连接部分下方,我正在尝试从我的 iOS 应用程序与服务器通信。我发出一个名为“response”的事件,并带有一个名为“I got your response”的字符串。
我在控制台中收到“用户已连接”消息,但我从 iOS 应用程序发送的消息从未在控制台中打印。
这是我应用中的代码。
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
let socket = SocketIOClient(socketURL: "192.168.0.3:3000")
socket.on("hello") {data, ack in
socket.emit("response", "I got your response")
}
socket.connect()
}
如您所见,我的服务器端代码发出事件“hello”。这应该会触发 socket.on("hello") 并让应用程序发出事件“response”,这会使服务器打印出与它一起发送的字符串。
除了用户连接时在控制台中打印的消息之外,这些都不会发生。
非常感谢您的帮助。
该框架的 Github 存储库如下 https://github.com/socketio/socket.io-client-swift
【问题讨论】:
-
检查服务器和客户端的日志。对于客户端,请考虑选项 log:true(检查 github 存储库中的 socket.io-client.swift),对于服务器端,将 node.js 应用程序运行为 DEBUG=* node yourfile.js 所以你可以知道哪一边是有问题的。您还可以使用数据包捕获工具(例如,wireshark)查看发送和接收的数据包以进行进一步分析。
-
您是否尝试过将您的套接字设为实例变量。它的作用域是你现在运行的函数。有几个人遇到了这个问题
-
@GregPrice 是对的,如果您启用日志记录,您会看到套接字仅存在于该函数的得分中,并在之后被释放。
标签: javascript ios node.js swift socket.io