- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我通过套接字将鼠标坐标从 python 服务器发送到 python 客户端。每次在服务器上捕获鼠标移动事件时都会发送鼠标坐标,这意味着非常频繁(每秒十几个左右)。
问题是当我在不同的主机上使用 python 服务器和 python 客户端时。然后只有部分消息被传送到客户端。例如第 3 条消息已送达,4 条消息未送达,4 条消息已送达等...
当服务器和客户端在同一主机(本地主机)上时,一切都很好。
当服务器和客户端位于不同的主机上时,一切都很好,但我使用标准的 Windows Telnet 客户端而不是 python 客户端从服务器读取消息。
我注意到当我在发送的每条消息之间使用 time.sleep(0.4) 中断时,所有消息都会被传递。问题是我需要实时而不是延迟的信息。是否可以使用套接字在 Python 中实现?
下面是我使用的 python 客户端代码:
import pickle
import socket
import sys
host = '192.168.1.222'
port = 8888
try:
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
except socket.error, msg:
print "Faile. Error:" + str(msg[0]), "Error message : " + msg[1]
sys.exit()
mySocket = socket.socket()
mySocket.connect((host,port))
while 1:
data = mySocket.recv(1024)
if not data: break
load_data = pickle.loads(data)
print 'parametr x: ' + str(load_data[0])
print 'parametr y : ' + str(load_data[1])
mySocket.close()
最佳答案
您正在使用 TCP (SOCK_STREAM),它是一种可靠的协议(protocol)(与 UDP 相反)不会丢失任何消息,即使接收方读取数据的速度不够快。相反,TCP 会降低发送速度。
这意味着问题一定出在您的应用程序代码中。
一种可能是问题出在您的发送方,即您使用 socket.send
并且不检查您打算发送的所有字节是否真的已发送。但是需要进行此检查,因为如果操作系统的套接字缓冲区已满,socket.send
可能只会发送部分数据,如果客户端读取数据的速度不够快,就会发生这种情况。
另一种可能性是您的 socket.recv
调用接收到的数据比您的 pickle.loads
需要的多,并且其余数据被丢弃(不确定 pickle.loads
如果提供的数据过多,将抛出异常)。请注意,TCP 不是消息而是流协议(protocol),因此您可能有更多 socket.recv
将返回包含多个腌制对象的缓冲区,但您只读取了第一个。这种情况发生在网络上的可能性高于本地主机,因为默认情况下 TCP 层将尝试将多个 send
缓冲区连接到一个 TCP 数据包中,以便更好地使用连接(即更少的开销) .并且很有可能在同一个 recv
调用中接收到这些信息。通过在发送方放置一个sleep(0.4)
,您已经有效地关闭了这种 TCP 优化,参见 NAGLE algorithm了解详情。
因此,实现您想要的内容的正确方法是:
socket.send
的返回。关于如果发送速度太快,Python 套接字 recv() 不会收到每条消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39931611/
我之前已经成功地完成了此操作,但现在在多次运行程序后,失败的原因是屏幕截图太快。当 jframe 淡入时,它不会获取正确的图像。我该如何解决这个问题? 编辑:所以基本上我试图捕获 JFrame 内 J
我正在 Canvas 中创建简单的动画。我使用 requestanimationframe 来控制动画。有3圈。但我只能看到 3 个圆圈,而且动画太快了。我的问题是如何减慢动画速度以及如何显示每一帧。
我有一个 ASP.NET-MVC 应用程序: 打开一个数据库事务 更新购物车状态和其他内容 通过 HttpRequest 将此购物车提交给另一个网络服务器 在数据库中注册传输及其代码状态 发送一封确认
我对大文件 ftruncate 和 fsync 操作感到惊讶。我编写了一个程序,在 Linux 64 位系统上创建一个空文件,将其截断为 0xffffffff 字节,然后 fsync 它。 在所有操作
我有一个 each 函数来确定何时单击 ID 中的链接。单击发生后,它会获取相关属性并将它们关联到主图像。 此功能还可以包括一个视频,因此如果 html 包含一个名为 #video 的 ID它采用视频
我有一个带有 TextBox 的简单 WM7 页面.此外,我分配了EventToCommand (一个 RelayCommand )到这个 TextBox , 对 TextChanged 使用reac
我正在使用 jquery fadein fadeout 和慢速选项,但它对我来说仍然有点太快了。现在我读到你只能在快和慢之间进行选择,但是有没有办法让它变慢呢? 最佳答案 你有两个选择。第一种是在调用
当我使用onSensorChanged()测试手机的加速度计时,发现它响应速度很快。几乎每1~3msonSensorChanged()就会被激活。我查了一些其他手机的信息,感觉有点奇怪,所以我怀疑我的
我正在使用 Java 和 OpenGL 为 Android 编写游戏。我可以将所有内容完美地渲染到屏幕上,但是当我尝试检查两个对象是否发生碰撞时,我的算法会在碰撞发生在屏幕上之前检测到碰撞。 这是我测
我正在开发一个 android 应用程序,当我从我的设备按下后退按钮时(一个人的正常按下时间,1 秒或更短),它从我的 Activity 跳到上一个 Activity (菜单)然后退出应用程序。但如果
我有 2 个 Activity ,我想在两个 Activity 之间创建一个动画过渡,这样两个 Activity 的 View 都会向上滑动,就好像第二个 Activity 正在向上插入第一个 Act
我有一个使用 jquery 的 setIntervall() 函数无限滑动图像的网站。 在 Chrome 13 中调用页面时,我切换到另一个选项卡几秒钟后返回,图像滑动速度更快,就好像它试图保持在没有
请考虑以下 ViewModel 片段: var id, given1, given2; $.get("testSynUfGet.aspx", null, function (data) { i
我目前正在使用 SmoothDivScroll 来实现图像的滚动流。但是,左边的 Hotspot 太快了,而 Right Hotspot 似乎 react 不正常。 我设置了一个 fiddle 来展示
很难说出这里问的是什么。这个问题是含糊的、模糊的、不完整的、过于宽泛的或修辞性的,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开它,visit the help center 。 已关
我有 2 个使用 Javascript 中的 Fetch API 的 HTTP 请求。我的主要语言是 Java,但我的任务是负责一个前端项目,所以我不确定是否有一个简单的解决方案。我的问题是,第一个调
我有 2 个使用 Javascript 中的 Fetch API 的 HTTP 请求。我的主要语言是 Java,但我的任务是负责一个前端项目,所以我不确定是否有一个简单的解决方案。我的问题是,第一个调
在我的应用程序中,我有一个项目列表和一个删除最后一个项目的按钮。然后在我的 Controller 上我写了以下操作: removeLastItem: -> lastItem = cur
我是一名优秀的程序员,十分优秀!