如何使用 Haxe/CPP 处理 Socket
How to handle Socket with Haxe/CPP
我正在尝试创建与服务器的基于套接字的通信,Haxe 客户端以 CPP 为目标。
我在看 sys.net.Socket 看起来像我想要的,但每个方法都是同步的!我如何等待服务器事件?
我习惯了带有 .on()
函数的 Node 语法,这里有等效项吗?
谢谢
从历史上看,hxcpp 和异步是一项艰巨的任务,因为没有开箱即用的 hxcpp 主循环,因此该任务实际上总是推迟到工具包(openfl、nme 等...)
据我所知,没有开箱即用的解决方案,绑定 http://zeromq.org/ 可能是一个简单易行的想法。
您也可以使用您喜欢的工具包中的 HTTP 实现。
祝你好运!
haxe/cpp中非阻塞套接字访问有两种可能的解决方案:
1) 将套接字设置为非阻塞
使用 Socket.setBlocking 方法可以设置套接字的阻塞行为。如果设置为 true
,这是默认值,像 socket.accept()
这样的方法(可能 socket.read()
但我没有亲自测试过)将阻塞直到它们完成。
但是如果您将阻塞设置为 false
,如果没有可用数据,这些函数将抛出(您需要捕捉并继续。)所以在您的主循环中您可以访问您的非阻塞在 read()
个调用周围带有 try/catch 的套接字。
2) 将套接字与主循环放在一个单独的线程中
您可以轻松地为您的套接字通信创建一个单独的 Thread,这样一个阻塞套接字就可以了。在此模型中,您的套接字线程将使用 Thread.sendMessage()
将数据发送回主线程,您的主循环将通过 Thread.readMessage(block:Bool)
检查是否有来自套接字的新数据。
我正在尝试创建与服务器的基于套接字的通信,Haxe 客户端以 CPP 为目标。
我在看 sys.net.Socket 看起来像我想要的,但每个方法都是同步的!我如何等待服务器事件?
我习惯了带有 .on()
函数的 Node 语法,这里有等效项吗?
谢谢
从历史上看,hxcpp 和异步是一项艰巨的任务,因为没有开箱即用的 hxcpp 主循环,因此该任务实际上总是推迟到工具包(openfl、nme 等...)
据我所知,没有开箱即用的解决方案,绑定 http://zeromq.org/ 可能是一个简单易行的想法。
您也可以使用您喜欢的工具包中的 HTTP 实现。
祝你好运!
haxe/cpp中非阻塞套接字访问有两种可能的解决方案:
1) 将套接字设置为非阻塞
使用 Socket.setBlocking 方法可以设置套接字的阻塞行为。如果设置为 true
,这是默认值,像 socket.accept()
这样的方法(可能 socket.read()
但我没有亲自测试过)将阻塞直到它们完成。
但是如果您将阻塞设置为 false
,如果没有可用数据,这些函数将抛出(您需要捕捉并继续。)所以在您的主循环中您可以访问您的非阻塞在 read()
个调用周围带有 try/catch 的套接字。
2) 将套接字与主循环放在一个单独的线程中
您可以轻松地为您的套接字通信创建一个单独的 Thread,这样一个阻塞套接字就可以了。在此模型中,您的套接字线程将使用 Thread.sendMessage()
将数据发送回主线程,您的主循环将通过 Thread.readMessage(block:Bool)
检查是否有来自套接字的新数据。