aquayhy 2022-02-17 09:51 采纳率: 0%
浏览 113

如何在webapi服务器和socket服务器之间通讯

目前用.net framework。现在有个问题,如果一个请求来自webapi,如何将这个信息转发到sockset服务器?

我搜到一个帖子,https://blog.csdn.net/weixin_42331508/article/details/106049582

浏览器请求 WebAPI的时候,设置有超时时间,比如说3秒超时。(如果3秒之内你不给我数据,我就认为没有数据返回)。
在Socket这一端呢,我向Socket发送WebAPI的请求数据。我给WebAPI的请求数据加一个编号,我当然不知道Socket啥时候给我返回数据,所以开了一个异步的线程,只要Socket有返回数据。我就把返回数据存到缓存里(以请求编号为键,缓存数据,这样就可以找到是哪一次请求的数据了,缓存默认30秒过期)。
然后WebAPI请求就在主等待返回数据,肯定不能无限期地等待下去,这里有个请求循环,每个循环 之间延迟100毫秒,最多5次循环。在每次循环中,WebAPI请求都是在缓存中找数据,根据请求编号找对应的返回数据,如果找到请求返回的数据,就直接返回。没找到就循环继续找,直到5次循环结束,还没有找到就认为找不到这条数据。
-------------

但是webapi服务器端如何通知socket端发送数据呢?就是加红的这句话?是webapi先把请求信息放到数据库中,然后socket服务器定时访问?还是有技术能直接让webapi服务器直接调用dll接口访问socket服务器端?

  • 写回答

1条回答 默认 最新

  • jayboy137 2023-02-07 14:11
    关注

    1.在 Web API 中接收请求,将请求内容读入到内存中。
    2.创建一个 Socket 客户端连接到 Socket 服务器。
    3.将请求内容写入到 Socket 客户端,发送给 Socket 服务器。
    4.从 Socket 客户端读取响应并返回到 Web API 的请求者。

    var socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
    socket.Connect("socket_server_host", socket_server_port);
    
    var request = ... // 取得请求内容
    
    // 发送请求
    socket.Send(Encoding.UTF8.GetBytes(request));
    
    var response = new byte[1024];
    var responseLength = socket.Receive(response);
    
    // 将响应转换为字符串并返回
    return Encoding.UTF8.GetString(response, 0, responseLength);
    
    
    
    评论

报告相同问题?

问题事件

  • 创建了问题 2月17日

悬赏问题

  • ¥15 求差集那个函数有问题,有无佬可以解决
  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥65 汇编语言除法溢出问题