问题标签 [usocket]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
lisp - 如何检查另一端是否从单个线程关闭了我的套接字流?
usocket FAQ建议我应该这样做的方式是从 a 中读取socket-stream
并检查end-of-file
结果。这适用于每个套接字有一个线程处于活动状态的情况,但对于我试图在同一个线程中服务多个套接字的情况似乎并不令人满意。
考虑类似的东西
对于本练习,假设我实际上有四个客户端连接到那里。似乎从一个线程为它们提供服务的方法类似于
除了这不起作用,因为断开连接的套接字仍然返回nil
到listen
,并且尝试read
从没有消息的活动套接字将阻塞但当 wait-for-intput
混合中有一个关闭的套接字时立即返回,即使没有其他套接字准备好消息(尽管它似乎没有指定哪些套接字导致它返回)。
在一段时间内没有客户端说话并且第三个客户端断开连接的情况下,似乎没有一种很好的方法可以找出并关闭该特定套接字连接。我必须按顺序阅读它们,除了由于read
没有输入的阻塞,这将导致线程等待前两个客户端都发送消息。
我想到的解决方案是(按偏好降序排列),但经过一番确定的谷歌搜索后仍未找到:
- 如果对目标流的读取将返回标记,则
listen
返回与该函数等效的函数。(用这个名义函数替换上面的函数会让它的其余部分按所写的那样工作)t
end-of-file
listen
- 一个与此等效的函数
wait-for-input
返回一个导致它跳闸的关闭套接字列表。(在这种情况下,我可以遍历关闭的套接字列表,检查它们是否真的用建议的read
技术关闭,并根据需要关闭/弹出它们) - 一个与此等效的函数
wait-for-input
返回导致它跳闸的第一个关闭的套接字。(与 #2 一样,但速度较慢,因为它每次迭代最多修剪一个非活动连接) - 跟踪我从每个套接字连接收到输入以来的时间,并在一段时间不活动后将其关闭。(无论如何我可能都想做,但是这样做可能会使一堆死连接比必要的时间长得多)
- 一个尝试
read-char
从具有即时超时的流中取出的函数,t
如果遇到,则返回:eof
,并且unread-char
s 其他任何内容(nil
在超时或未读取后返回)。(这是最后的手段,因为它似乎很容易以一种不明显但致命的方式破解)。
另外,如果我以完全错误的方式思考这个问题,也请指出这一点。
webdev.webserver - lisp 的土地 src webserver.lisp
当我在“lisp 之地”第 12 章和第 13 章学习“socket”时。我使用的是lispbox,所以我需要安装一个socket。最后,我发现usocket可用。这是一个关于如何使用usocket来构建网络服务器的示例。
http://landoflisp.com/webserver.lisp中的原始“服务”功能
sockets - 通过 LISP USOCKET 接收数据
我正在尝试通过USOCKET发送数据。当数据到达服务器时,服务器应该回复。但是,stream-read
(如下定义)仅在与发送的原始数据一起回显时才返回数据。例如,如果我发送hello
并且服务器用相同的数据回复hello
,则stream-read
返回,但如果服务器用hi
,回复,stream-read
则在服务器发送它接收到的确切缓冲区之前不会返回。
这是代码:(我在网上找到了大部分。)
至于服务器,我使用的是 boost 阻塞服务器示例的略微修改版本。(c++) 完整代码可以在这里找到:http: //www.boost.org/doc/libs/1_53_0/doc/html/boost_asio/example/echo/blocking_tcp_echo_server.cpp
http - 使用 Common Lisp usocket 发送 http 请求时出现 400 Bad Request
我正在使用以下代码来获取 url http://brandonhsiao.com/essays.html
:
这给了我一个400 Bad Request
错误,但是当我http://brandonhsiao.com/essays.html
使用 Firefox 访问时,一切都很好。我究竟做错了什么?
websocket - 带有 usocket 库的 Common Lisp 中的 WebSocket 客户端
我正在尝试升级协议,从 HTTP 1.1 切换到 WebSockets。我试过使用usocket。到目前为止,我的代码如下(可作为GitHub gist获得)。握手读取后,函数返回NIL
或unexpected EOF
错误。
sockets - 从 lisp 中的套接字流读取行
我在 lisp 中的 TCP 客户端上工作,并且在正确读取/打印套接字流时遇到了困难。当客户端向服务器发送数据时,它应该会收到响应,我需要将其写入标准输出。这可以正常工作,除了我遇到响应打印两次的问题。如果我有多个命令被发送,只有最后一个会被打印两次。这是我的代码:
sockets - 如何使用usocket创建连接?(常见的口齿不清)
我正在尝试在 lisp 中使用套接字来创建连接。使用 sbcl,我发现“usocket”可用。但我未能在服务器和客户端之间发送字符串。这是代码:
服务器:
客户:
我先运行了服务器代码,它冻结了。然后我运行客户端代码。但服务器似乎没有任何反应。我试图将字符串格式化为st流:
但它返回零。
我该如何解决这个问题?非常感谢。
network-programming - Usocket无符号字节8不接收数据,而字符元素类型接收
我在使用 USocket 库时遇到了一些真正令人费解的行为。考虑以下代码段:
为什么会这样?当我:element-type '(unsigned-byte 8)
从论点中省略时usocket:socket-listen
,它工作得很好。我可以理解是否任何任意字节都不能表示为字符(例如 utf-8 编码具有无效的字节序列),但是反过来 - 不能用字节表示的字符 - 没有意义,尤其是在网络中语境。
(如果有帮助,我在 Lubuntu 15.10、USocket 0.6.3.2 上运行 clisp-2.49)。
common-lisp - 单线程序列读取多用户usocket服务器
我正在尝试使用 usocket 库编写一个简单的服务器程序,该程序将执行一项相对微不足道的任务 - 例如,回显数据。我想让它能够对多个客户端执行此操作,而不是在等待来自任何单个客户端的输入时阻止单个线程。我发现使用wait-for-input
with可以检查给定的套接字是否已准备好输入:timeout 0
。但是我很难read-sequence
按照自己的意愿工作。如果我给它一个包含 50 个元素的数组,但只有 5 个可用,它会等到 50 个可用时才将它们放入数组中。
有没有办法一次(有效地)读取块,只用一个线程,而不必一直等待输入?还是我真的必须read-byte
一遍又一遍地打电话,直到我得到一切?
read-sequence
如果有一些等价物只读取当时可用的数量,或者如果有一些函数可以告诉我有多少元素可以读取,那么我可以适当地调整数组的大小,则可以规避这个问题。但我不知道其中任何一个。
更新:我专门寻找不需要读取字符的二进制解决方案,因此涉及read-char-no-hang
,listen
等的解决方案不会有太大帮助,除非它们具有二进制等效项。我不想使用字符,因为某些字符编码(例如 UTF-8)可能有无效的字节序列,没有字符表示,我希望能够处理任何字节序列。而且我特别在寻找不需要一次又一次地读取一个字节的解决方案,或者确认不存在这样的解决方案(在标准中),在这种情况下,我很想听听最方便的可以提供实现该目标所需的最低限度的库。不仅一次读取一个字节不是最快的方法,它还需要我编写的任何函数以非阻塞方式执行此操作,以便对每个字节使用usocket
'wait-for-input
函数(因为listen
不适用于字节流),这将需要该函数了解套接字,并且我将不得不编写一个read-all-bytes
无法与文件流一起使用的过于具体的函数。这是可能的,但我希望有一个更通用的方法。
common-lisp - Hunchentoot 测试 webserver usocket 连接被拒绝错误
尝试启动 Hunchentoot 测试网络服务器,但 usocket 在 Mac OSX El-Capitan、SBCL 1.1.6.0-3c5581a 中引发连接错误
请帮忙...