我使用AsyncSocket类创建了一个简单的聊天应用程序,客户端节点可以通过聊天服务器应用程序相互发送消息.我想在其中集成语音聊天功能,但我没有通过网络获得任何材料,这可以向我展示正确的方向继续前进.
任何人都可以建议我一些有用的链接或想法,可以帮助我的启动?
谢谢,
Miraaj
对于任何有经验的C#开发人员来说,这可能是小菜一碟
您在此处看到的是异步Web服务器示例
using System;
using System.Text;
using System.Net;
using System.Net.Sockets;
using System.Threading;
namespace SimpleServer
{
    class Program
    {
        public static void ReceiveCallback(IAsyncResult AsyncCall)
        {            
            System.Text.ASCIIEncoding encoding = new System.Text.ASCIIEncoding();
            Byte[] message = encoding.GetBytes("I am a little busy, come back later!");            
            Socket listener = (Socket)AsyncCall.AsyncState;
            Socket client = listener.EndAccept(AsyncCall);
            Console.WriteLine("Received Connection from {0}", client.RemoteEndPoint);
            client.Send(message);
            Console.WriteLine("Ending the connection");
            client.Close();
            listener.BeginAccept(new AsyncCallback(ReceiveCallback), listener);
        }
    public static void Main()
    {
        try
        {
            IPAddress localAddress = IPAddress.Parse("127.0.0.1");
            Socket listenSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); …我的代码在单个线程中使用boost :: asio和io_service来执行各种套接字操作.所有操作都是异步的,每个处理程序都依赖于boost::system::error_code(特别boost::asio::error::operation_aborted)确定操作的结果.
在我改变逻辑以进行多个并发连接并选择最快的连接之前,它一直运行良好.也就是说,当第一个async_read_some处理程序触发时,我取消其他套接字(shutdown,close  -  everything)并继续当前的套接字.在95%的情况下,使用operation_aborted错误调用其他套接字的读取处理程序.但有时,这些读取处理程序被调用而没有错误,告诉我它们已成功接收N个字节.
但socket :: cancel()的文档说明:
此函数会导致所有未完成的异步连接,发送和接收操作立即完成,并且已取消操作的处理程序将传递
boost::asio::error::operation_aborted错误.
所以,问题:我真的可以依赖operation_aborted生产代码中的错误吗?如果可以的话,它是来自增强1.46.1的Asio中的一个错误吗?如果我不能,是否有关于此的官方文件?
我一直试图在Apple Mac上运行这里提供的websocket聊天示例. https://github.com/unbit/uwsgi/blob/master/tests/websockets_chat_async.py
但运行此示例会导致uwsgi中出现段错误.
我已经在websocket.py中复制粘贴了这个例子,并使用以下命令运行服务器
uwsgi --http :8080 --http-websockets --wsgi-file websocket.py --venv ../../python2-wow
当我访问URL时,我得到了正确的连接建立消息.但随后服务器崩溃了这个段错误
!!! uWSGI process 29129 got Segmentation Fault !!!
*** backtrace of 29129 ***
0   uwsgi                               0x00000001078b5ec0 uwsgi_backtrace + 48
1   uwsgi                               0x00000001078b6371 uwsgi_segfault + 49
2   libsystem_platform.dylib            0x00007fff96b2c5aa _sigtramp + 26
3   ???                                 0x0000000000000000 0x0 + 0
4   uwsgi                               0x0000000107897b4e async_add_fd_read + 206
5   uwsgi                               0x00000001078c8979 py_eventfd_read + 89
6   Python                              0x00000001079d214d PyEval_EvalFrameEx + 8080
7   Python                              0x00000001079d0093 PyEval_EvalCodeEx + 1641
8   Python                              0x0000000107977796 PyFunction_SetClosure + …我有一个生产者和n个工人,我只想在他们还没有处理工作单元的时候工作,我很难找到一个好的零模式.
1)REQ/REP
生产者是请求者并创建与每个工作者的连接.它跟踪哪个工人忙碌,轮询闲置工人
问题:
2)按下/拉
生产者推入一个所有工作者都关闭的套接字,工作者进入生产者监听的另一个套接字.
问题:
3)PUB/SUB
不首先,因为没有办法确保工作不会丢失
4)反向REQ/REP
每个工作者都是REQ结束,并从生产者请求工作,然后在完成工作时发送另一个请求
问题:
recv都必须与a配对send).这可以防止工人完成工作5)每个工人的配对
每个工人都有自己的PAIR连接,允许独立发送工作和收到结果
问题:
REQ/ REP与要求每个工人线程尽管zeroMQ是非阻塞/异步的,但是我找不到允许我的代码同步的模式,而不是在许多专用线程中阻塞或者在更少的情况下轮询自旋循环.这对于zeroMQ来说不是一个好的用例吗?
我boost::asio::connect在一个tcp::socket. 当一切顺利时,connect立即返回,但在网络不佳的情况下,connect日志等待 15 秒后超时。我不能等那么久,所以想减少超时。不幸的是,到目前为止我还没有遇到任何解决方案。  
我看到 async_wait 与deadline_timer 一起使用的解决方案,但所有这些示例都是用于接收/发送操作而不是用于连接。
任何人都可以帮助我提供boost::asio::connect(socket, endpoints);. 要求是它应该在 5 秒而不是 15 秒内超时。
我对异步编程不是很熟悉,我有一个问题。
我的问题如下。鉴于 boost.asio 中 C++11 的 echo_server 示例:http : //www.boost.org/doc/libs/1_60_0/doc/html/boost_asio/example/cpp11/spawn/echo_server.cpp
我想知道是否std::make_shared<session>可以用C++14中的a替换C++14中的a std::unique_ptr<session>,避免引用计数的开销。
我不确定,因为我们有shared_from_this()但没有类似的东西unique_from_this(),所以我如何unique_ptr<session>从内部访问this?。
我有一个应用程序,我必须使用套接字连接将数据发送到服务器并读取将由服务器发送的数据.我正在使用AsyncSocket类来写入和读取数据.我成功地在服务器上写入数据,服务器可以看到应用程序发送的数据.现在,问题是每当服务器向应用程序发送一些数据时,我如何使用AsyncSocket类接收这些数据.以下是我的代码.我把代理方法用于读取数据,但它从未调用过.
var socket = AsyncSocket()
socket = AsyncSocket(delegate: self)
self.socketConnect()
func socketConnect() {
        do {
            try socket?.connectToHost("IP Address", onPort: 6968)
        } catch _ as NSError {
        }
    }
//MARK: - AsyncSocket Delegates method
    func onSocket(sock: AsyncSocket!, didConnectToHost host: String!, port: UInt16) {
        print("Connected to host : \(host) with Port : \(port)")
        let alert:UIAlertController = UIAlertController(title: "Connected", message: "Host:\(host) ** Port:\(port)", preferredStyle:.Alert)
        self.presentViewController(alert, animated: true, completion: nil)
        let action:UIAlertAction = UIAlertAction(title: "Ok", style: .Default) { (UIAlertAction) -> …我正在使用 python asyncio 流连接到多个套接字服务器,但是当服务器关闭时,我的代码无法自动重新连接。
我需要的是,当服务器关闭时,我的脚本将尝试每 5 秒重新连接一次,直到连接并再次开始解析数据。
import asyncio
server1 = {'host': '192.168.1.51', 'port': 11110}
server2 = {'host': '192.168.1.52', 'port': 11110}
async def tcp_client(host, port, loop):
    print('connect to server {} {}'.format(host, str(port)))
    reader, writer = await asyncio.open_connection(host, port, loop=loop)
    while True:
        data = await reader.read(100)
        print('raw data received: {}'.format(data))
        await asyncio.sleep(0.1)
loop = asyncio.get_event_loop()
try:
    for server in [server1, server2]:
        loop.run_until_complete(tcp_client(server['host'], server['port'], loop))
        print('task added: connect to server {} {}'.format(server['host'], server['port']))
finally:
    loop.close()
    print('loop closed')
我正在做一个可变长度的消息接收,类似于此问题,其中消息的正文的长度在标头中指定,并且我异步读取循环中的正文,直到将其全部传输为止。
但是,由于网络的缘故,有时会显得太迟钝,为了保持连接的新鲜度,我想杀死套接字并重新连接。不幸的是,如果数据很慢并且随意返回时,异步beginreceive似乎不会真正返回。
什么是最适合测量速度的方法,以便在必要时可以断开连接?我想我可以将DateTime对象置于异步状态,也许做一些计算?
对于上下文,这是针对我与Arduino一起构建的wifi温度探头,该探头以突发方式发送数据,但是wifi连接在打算使用的地方确实很模糊。
asyncsocket ×10
boost-asio ×3
c++ ×3
sockets ×3
boost ×2
c# ×2
python ×2
asynchronous ×1
chat ×1
cocoa ×1
handler ×1
http-headers ×1
ios ×1
macos ×1
nonblocking ×1
swift ×1
uwsgi ×1
voice ×1
webserver ×1
websocket ×1
windows ×1
xcode ×1
zeromq ×1