目前在做 tcp 协议方面的工作
想完成一个思路
connect 时写一个函数,并把这个函数设置为全局变量
send 数据时写一个函数,把 connect 的全局变量当参数传进来,用于发送数据
当这样操作时发现两次的 response 是一样的,但是我请求的是两个不同的接口,通过查日志发现,发送的数据是不同的,但是第二次的请求虽然发送了,但是没有 response,所以打印了两次第一次的 response
这是封装后的连接函数,下面传到了全局变量的 ob 上
这是发送的函数,下面是在一个文件里,请求两个不同的接口
两次的结果是一样的,这块就好像第一次请求完把第二次的请求覆盖了一样
两次结果都是 1(此处是打个比方)
困扰多日的问题,希望有高手可以帮助解答一二,是不是全局变量的用法不对,还是 socket 不能这样用
没看到全局变量啊
在函数里面使用全局变量需要用 global
TCP_CLIENT = None
def func():
global TCP_CLIENT
TCP_CLIENT = ...
建议第二个请求换一个端口号. 这个东西涉及到底层的东西了,即便是换了另外的端口号可以运行正确,当你再次运行程序的时候,那两个已使用过的端口可能还没有被操作系统释放,第二次也有可能程序出错,
我猜想是这样
可以看到日志,第一个 send 和第二个 send 都正常的把发的内容展示出来了,但第二个请求的 response 内容返回时就变成第一个请求的 response 了,比如第一个接口协议代号是 777,第二个是 888,在本来应该返回 888 的 response 时,返回了 777 的 response,所以我以为是第一个请求把第二个给覆盖了
不好意思由于里面有公司的内定义的东西,所以不方便展示
我看了日志正确的比如我单独访问这个接口和两个接口一起访问服务端的日志返回的内容,里面就是 context=()这个 context 不同
正确的里面内容是 clientNativeId,手机号,加密版本,错误的里面展示的是 secretKey,等等,和正常的不一样
可以用 wireshark 抓包一下,先排查一下本地电脑是否收到了第二次的 response。
各位我有个最新的日志,显示我的 sessionid 和缓存中的 sessionid 不一致,但我看显示的是相同的 id
我不懂 py,我估摸着:
1、如果你要是做 TCP 长连接,你要考虑一下具体怎么实现,到底是不是现在代码的样子不好说;
2、如果不是长连接,那么每次请求都要重新连接,请求完毕要 close/release connection 的吧