我正在尝试与服务器创建基于套接字的通信,Haxe客户端以CPP为目标。
我正在看sys.net.Socket看起来像我想要的,但每个方法都是同步的!我该如何等待服务器事件?
我习惯使用.on()
函数定位语法,这里有没有相应的东西?
由于
答案 0 :(得分:2)
历史上hxcpp和async是一项艰巨的任务,因为没有开箱即用的hxcpp主循环,所以任务实际上总是推迟到工具包(openfl,nme等......)
AFAIK没有开箱即用的解决方案,绑定http://zeromq.org/可能是一个简单明了的任务。
您还可以推荐使用您喜欢的工具包装箱的HTTP实施。
祝你好运!答案 1 :(得分:2)
haxe / cpp中有两种可能的非阻塞套接字访问解决方案:
1)将套接字设置为非阻塞
使用Socket.setBlocking方法设置套接字的阻塞行为。如果设置为true
,这是默认设置,socket.accept()
(可能socket.read()
但我未经过亲自测试的方法)将会阻止,直到完成为止。
但是如果你将阻止设置为false
,那么如果没有数据可用,那么这些函数将会抛出(你需要捕获并继续前进。)因此,在你的主循环中你可以访问你的非阻塞在read()
调用周围使用try / catch的套接字。
2)将套接字放在主循环的单独线程中
您可以轻松地为套接字通信创建单独的Thread,因此阻塞套接字就可以了。在此模型中,套接字线程将使用Thread.sendMessage()
将数据发送回主线程,您的主循环将通过Thread.readMessage(block:Bool)
检查套接字中是否有新数据。