我正在设计一个HTTP服务,每天的容量高达5亿个请求(由多个独立机器提供服务).
对于每个请求,我必须生成唯一ID并将其返回给用户.在10分钟的窗口内,ID必须是100%唯一的.(首选1天,全局唯一ID是理想的.)生成该ID不需要服务器 - 服务器通信.
愚蠢的伪会话示例:
Client: GET /foo
Server: Content-Type: text/xml
<root>
<id>ab9d1972-2844-11e0-86b2-000c29544403</id>
<other_data/>
</root>
在上一代HTTP服务中,我使用了UUID.
我对UUID很满意,但有一个问题:它们太长了.在这些请求数量上,这个额外的大小在磁盘空间中明显浪费了日志文件.
创建简短但唯一的标识符的最佳方法是什么?为了让事情变得有价值,我想,算法应该产生UUID长度的一半,而一整天都是唯一的(10分钟应该更短).
理想情况下,建议的算法将在简单的C中具有理智,轻量级的生产质量实现.
更新:生成的ID在GET请求中传递时不应要求URI编码.
(语言/ API:标准C 89库和/或POSIX)
可能是一个微不足道的问题,但我有一种感觉,我错过了一些东西.
我需要实现这个功能:
time_t get_local_midnight_timestamp(time_t ts);
Run Code Online (Sandbox Code Playgroud)
也就是说,我们得到任意时间戳(例如,从去年开始),并将其四舍五入到同一天的午夜.
问题是该功能必须知道DST开关和DST规则的变化(如DST取消和/或扩展).
该功能还必须面向未来,并应对奇怪的TZ变化(如提前30分钟的时区转移等).
(我需要实现所有这些的原因需要查看一些较旧的统计数据.)
根据我的理解,struct tm将时间字段归零的天真方法不起作用 - 正是因为DST的东西(在DST更改日看起来有两个本地午夜time_t时间戳).
请指出我正确的方向......
我怀疑它可以用标准C 89完成,因此POSIX特定的解决方案是可以接受的.如果不是POSIX,那么Debian特有的东西会做......
更新:另外:有东西告诉我,我也应该考虑闰秒.也许我应该考虑尝试直接使用Tz数据库 ...(这是相当悲伤 - 如此多的/感知/开销这么小的任务.)...或者不 - 似乎libc应该使用它,所以也许我是只是做错了......
更新2:这就是为什么我认为天真的解决方案不起作用的原因:
#include <stdio.h>
#include <time.h>
int main()
{
struct tm date_tm;
time_t date_start = 1301173200; /* Sunday 27 March 2011 0:00:00 AM MSK */
time_t midnight = 0;
char buf1[256];
char buf2[256];
int i = 0;
for (i = 0; i < 4 * 60 * 60; i += 60 …Run Code Online (Sandbox Code Playgroud) 我需要测试一些现有的 http://URL 解析代码以符合RFC 3986。
我不想重新发明轮子,也不想碰到各种极端情况。
是否有一些现有的综合测试套件?
我没有指定我使用的语言,因为我希望测试套件足够通用以适应。不过,我会满足于任何理智的事情。
在Lua中,对于iPad Corona项目,我正在使用network.request请求UTF-8服务器文本文件(包含中文字符),但是在控制台或应用程序中显示的结果显示为"垃圾".例如,谷歌浏览器显示相同的UTF-8页面,因为我在服务器将其(使用PHP)发送到'Content-Type:text/plain;时设置了http标头.charset = utf-8'(并且没有BOM,字节顺序标记).我在Lua中看到的"垃圾"看起来类似于我"强制"Chrome使用选项菜单将页面呈现为ISO-8859-1.
有没有人有任何帮助或指针?如果所有其他方法都失败了,我如何将"垃圾"字符串转换回Lua中的UTF-8起源?
谢谢你的帮助!
我正在使用导演类进行场景转换,我需要在另一个类的类中使用该变量.那我怎么称呼呢?
local a= require "welcome"
Run Code Online (Sandbox Code Playgroud)
variableName是welcome类中的文本显示对象
print(a.variableName.text)
Run Code Online (Sandbox Code Playgroud)
但是我没有.
你能救我吗?谢谢
更重要的是新的发明 - 蹦子树合并策略(不是新的git-子树命令)或git的子模块的命令(或者潜在的机制,如果有一个单独的一个对称的Git树指令相对于合并策略).
Git发行版中首先包含哪些内容?
链接到相关Git ML帖子的奖励积分.
我试过从Git提交历史中挖掘这些信息,但是在2007-2008两个功能中都丢失了.