有没有好的HTTP一致性测试套件?
我需要测试一些符合标准的现有代码,并且不想重新发明轮子并碰到各种角落情况.
我没有指定我使用的语言.我希望套房足够通用,以适应我的需求 - 尽管我会满足于任何理智的东西.
我需要编写一个bash脚本,除其他外,应该将其所有参数原封不动地传递给另一个程序.
最小的例子:
$ cat >proxy.sh #!/bin/bash ./script.sh $@ ^D $ chmod +x proxy.sh $ cat >script.sh #!/bin/bash echo one $1 echo two $2 echo three $3 ^D $ chmod +x script.sh
这种天真的方法不适用于带空格的参数:
$ ./proxy.sh "a b" c one a two b three c
预期:
$ ./proxy.sh "a b" c one a b two c three
proxy.sh为了实现这一点,我应该写些什么?
请注意,我不能使用别名,proxy.sh必须是一个脚本 - 它在调用之前做了一些事情script.sh.
我需要处理一大串短字符串(大多数是俄语,但任何其他语言都是可能的,包括来自猫在键盘上行走的随机垃圾).
其中一些字符串将以UTF-8编码两次.
我需要可靠地检测给定的字符串是否是双重编码的,并修复它.我应该在不使用任何外部库的情况下执行此操作,只需检查字节即可.检测应尽可能快.
问题是:如何检测给定字符串是否以UTF-8编码两次?
更新:
原始字符串为UTF-8.这是执行第二次编码的AS3代码(遗憾的是我无法控制客户端代码,所以我无法修复此问题):
private function toUTF8(s : String) : String {
var byteArray : ByteArray = new ByteArray();
byteArray.writeUTFBytes(s);
byteArray.position = 0;
var res : String = "";
while(byteArray.bytesAvailable){
res += String.fromCharCode(byteArray.readUnsignedByte());
}
return res;
}
myString = toUTF8(("" + myString).toLowerCase().substr(0, 64));
Run Code Online (Sandbox Code Playgroud)
注意toLowerCase()电话.也许这可能有帮助吗?
上下文:操作系统:Linux(Ubuntu),语言:C(实际上是Lua,但这应该不重要).
我更喜欢基于ZeroMQ的解决方案,但会接受任何足够的理智.
注意:由于技术原因,我不能在这里使用POSIX信号.
我在一台机器上有几个相同的长寿命流程("工人").
我不时需要通过命令行工具向每个进程传递控制消息.例:
$ command-and-control worker-type run-collect-garbage
本机上的每个工作人员都应收到一条run-collect-garbage消息.注意:如果解决方案在某种程度上适用于集群中所有计算机上的所有工作程序,那将是完美的,但我可以自己编写该部分.
如果我将存储有关正在运行的工作人员的一些信息,这很容易做 例如,将它们的PID保存在已知位置,并在已知路径上打开控制Unix域套接字,其中包含PID.或者打开TCP套接字并在某处存储主机和端口.
但这需要仔细管理存储的信息 - 例如,如果工人流程突然死亡会怎么样?(没有什么是难以管理的,但是,仍然,额外的大惊小怪.)此外,信息需要存储在某个地方,从而增加了额外的复杂性.
在PUB/SUB风格中有一个很好的方法吗?也就是说,工作者是订阅者,命令和控制工具是一个发布者,他们所知道的只是一个"频道网址",所以说,要发送消息.
其他要求:
我需要为某些数据集创建一个匹配查找器系统,如下所示:
有一组对象,每个对象都由一个字符串标识ObjectID.
每个对象都具有N个属性P i.每个属性值都是一个字符串.
N = 3的数据库示例(在现实生活中N = 8).
ObjectID: P1 P2 P3 -------------------------------- APPLE: RED ROUND FRUIT ORANGE: ORANGE ROUND FRUIT CARROT: RED LONG VEGETABLE
系统必须返回ObjectIDs的集合,匹配对象属性的给定查询.在查询中,用户必须指定所有属性值.或者,对于查询中的某些或所有属性,用户可以指定"通配符" *,这意味着任何属性值都将匹配条件.
示例查询:
P1 P2 P3 => Result ------------------------------------ * ROUND FRUIT => APPLE, ORANGE RED LONG VEGETABLE => CARROT RED * * => CARROT, APPLE
所有这些都是用SQL完成的.
问题是:有没有一种巧妙的方法可以用Redis做到这一点?
请注意,我对基于Redis的解决方案感兴趣,特别是出于自我教育的目的; 对于这个特定的问题,其他数据库是offtopic.
更新:具有ObjectID每个P i和应用程序端过滤的显式列表的简单解决方案对我来说看起来不够整洁:-)
在我的小型JS Web应用程序中,我使用了一些JSON数据.
数据在服务器上的单独静态.json文件中.
我的应用程序很小,不使用任何框架,甚至不使用jQuery.而且我不想惹恼XMLHTTPRequest自己.
有没有办法在没有AJAX的情况下加载我的JSON数据?(并且无需将文件重命名为.js模拟JSONP或包含现有JS源中的数据.)
如果它仅适用于现代浏览器,则可以.
我有一个带有占位符字符串的骨架文本文件:
blah blah blah
blah $PLACEHOLDER_1$
blah
$PLACEHOLDER_2$
Run Code Online (Sandbox Code Playgroud)
等等.占位符的特定"形式"并不重要 - 我可以将它们更改为最适合特定实现的任何内容.
我有一个bash脚本,我知道占位符的值,我需要生成一个新文件,占位符替换为值.
#! /bin/sh
PLACEHOLDER_1 = 'string 1'
PLACEHOLDER_2 = 'multiline
string
2'
# TODO: Generate file output.txt from file output.template
# using placeholders above.
Run Code Online (Sandbox Code Playgroud)
我可以用sed多次通过,但这并不好玩.我不希望使用Perl.我想只使用textutils和bash本身.
在一次传球中做我想做的最好的方法是什么?
Redis 2.0.3
在我的Redis DB中,我有一组项目.每个项目都有一个与之相关的计数器:
MULTI
SADD "items-set" "foo"
INCRBY "items:foo" 10000
EXEC
Run Code Online (Sandbox Code Playgroud)
新项目以随机间隔添加到集合中.
当用户执行某个操作时,计数器会递减:
new_counter = DECR "items:foo"
Run Code Online (Sandbox Code Playgroud)
当计数器降到零以下时,我需要从集合中原子地移除项目(或者:当计数器完全达到零时,我可以为此修复逻辑.)
if new_counter < 0 then
MULTI
SREM "items-set" "foo"
DEL "items:foo"
EXEC
end
Run Code Online (Sandbox Code Playgroud)
如何在没有项目名称用SETNX/ 锁定的情况下执行此操作GETSET?
涉及改变我在Redis中存储数据的方式的解决方案是可以接受的.(但是,为了以防万一,我保留一个权利,可以用一些特定于任务的细节来对付它们,我可以在初始文本中将其遗漏.)
我正在用纯C89编写一个自定义的跨平台简约TCP服务器.(但我也会接受POSIX特定的答案.)
服务器使用UTF-8字符串,但从不查看它们.它将所有字符串视为不可变二进制blob.
但是现在我需要接受来自客户端的UTF-8字符串,它不知道如何以字节为单位计算它们的大小.客户端只能以字符传输字符串长度.(更新:客户端是在JavaScript中,"字符长度"实际上是任何String.length()返回.我假设它是实际的UTF-8字符,而不是其他东西.)
我不想在我的小服务器上添加大量依赖项.是否有一种强大而简洁的方式来读取此数据报?(为了这个问题,让我们说它是从中读取的FILE *.)
U<CRLF> ; data type marker (actually read by dispatching code)
<SIZE><CRLF> ; UTF-8 string size in characters
<DATA><CRLF> ; data blob
Run Code Online (Sandbox Code Playgroud)
例:
U
7
??????!
Run Code Online (Sandbox Code Playgroud)
更新:
一批数据可以包含多个数据报,因此近似读取不起作用,我需要读取确切数量的字符.
实际的UTF-8数据可能包含任何字符,因此我不能选择一个字符作为终结符 - 我不希望在数据中转移它.
上下文:Linux(Ubuntu),C,ZeroMQ
我有一个侦听ipc://SUB ZeroMQ套接字的服务器(物理上是一个Unix域套接字).
我有一个客户端应该连接到套接字,发布其消息并断开连接.
问题:如果服务器被杀死(或以其他方式不自然地死亡),套接字文件将保持不变.如果客户端尝试连接到这个陈旧的套接字,它会阻塞zmq_term().
如果服务器不存在,我需要阻止客户端阻止,但如果服务器处于活动状态但很忙,则保证传送.
假设我无法通过某些外部魔法跟踪服务器生命周期(例如,通过检查PID文件).
任何提示?