由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - 古德霸:协议确定了,请你确认
相关主题
好虫和魏赌局见证这道题有什么好思路?
how to initialize this struct.get_innerHTML需要什么样的permission?
100%出票还真没在赌约里。如何才能到达内存带宽的极限呢?
C10M 练习2: 空TCP 连接,1M per 4G RAM紧急求助,C语言面试题
C & C++ mixing question一个函数指针的问题
问魏老师个问题,跟赌约无关python 如何查找数值并判断是否空
我们来做点unit test吧,座位数从3000改为4什么时候写程序要注意这个问题?
How to detect overflow in C?再请教一个c++的简单问题(enumerated constant)
相关话题的讨论汇总
话题: int32话题: reqid话题: heartbeat话题: int16话题: int64
进入Programming版参与讨论
1 (共1页)
t**********1
发帖数: 550
1
struct NetReq {
int64_t _reqID;
int32_t _train; // [0, 5000)
int16_t _start; // [0, 10)
int16_t _length; // [1, 10]
};
struct NetResp {
int64_t _reqID;
int32_t _respID;
int32_t _seat;
};
记住,实际任何商用协议,client必须定期发送heartbeat。否则是设计缺陷,而且是
不可弥补的缺陷。因为如果因为网络原因造成client断连,server不会知道。
我建议heartbeat采用_train=-1,其他随意。heartbeat因该只在idle时候发送。
我的server设定heartbeat + 2秒没有收到任何东西,自动断开连接。
你可以选择不支持hearbeat功能。但是这样你就不能随便断开连接。老老实实total <
500 TCP测试到底。否则我的服务器会自动拒绝所有>500的连接。这不是我的问题,因
为设计缺陷是你选择的,不是我。
g****u
发帖数: 252
2
请解释下,是不是说我一个socket开两个线程,一个往里写NetReq结构,
一个往外读NetResp结构?seat表示什么?如果输入_train = -1,
seat又应该是什么?为什么reqID是64位,而respID是32位?

<

【在 t**********1 的大作中提到】
: struct NetReq {
: int64_t _reqID;
: int32_t _train; // [0, 5000)
: int16_t _start; // [0, 10)
: int16_t _length; // [1, 10]
: };
: struct NetResp {
: int64_t _reqID;
: int32_t _respID;
: int32_t _seat;

t**********1
发帖数: 550
3
我如何实现是我的问题。但是我handle所有socket I/O只用一个线程。
任何参数不对,seat都是-1。
否则seat>=0

【在 g****u 的大作中提到】
: 请解释下,是不是说我一个socket开两个线程,一个往里写NetReq结构,
: 一个往外读NetResp结构?seat表示什么?如果输入_train = -1,
: seat又应该是什么?为什么reqID是64位,而respID是32位?
:
: <

g****u
发帖数: 252
4
进去出来都是128 bit,我刚刚测出来CPU支持每秒8M请求,
换成带宽是1024Mbit,1GB ethernet将将能支持。8M/s搞不定,
5M/s应该没问题。

【在 t**********1 的大作中提到】
: struct NetReq {
: int64_t _reqID;
: int32_t _train; // [0, 5000)
: int16_t _start; // [0, 10)
: int16_t _length; // [1, 10]
: };
: struct NetResp {
: int64_t _reqID;
: int32_t _respID;
: int32_t _seat;

g****u
发帖数: 252
5
老魏你有没有可能支持以下两者之一:
- 要么NetResp返回分配的座位
- 要么benchmark结束你的程序推出后你dump出来座位分配方案。
不然没法验证你出票的正确性。

【在 t**********1 的大作中提到】
: struct NetReq {
: int64_t _reqID;
: int32_t _train; // [0, 5000)
: int16_t _start; // [0, 10)
: int16_t _length; // [1, 10]
: };
: struct NetResp {
: int64_t _reqID;
: int32_t _respID;
: int32_t _seat;

t**********1
发帖数: 550
6
NetResp本来就返回分配的座位号呀?

【在 g****u 的大作中提到】
: 老魏你有没有可能支持以下两者之一:
: - 要么NetResp返回分配的座位
: - 要么benchmark结束你的程序推出后你dump出来座位分配方案。
: 不然没法验证你出票的正确性。

g****u
发帖数: 252
7
好。我没问题了。

【在 t**********1 的大作中提到】
: NetResp本来就返回分配的座位号呀?
n****j
发帖数: 1708
8
浪费了点,应该 64 bit 就足够了。另外,一般留几个 bit 做 opcode,比如
heartbeat 。

【在 t**********1 的大作中提到】
: struct NetReq {
: int64_t _reqID;
: int32_t _train; // [0, 5000)
: int16_t _start; // [0, 10)
: int16_t _length; // [1, 10]
: };
: struct NetResp {
: int64_t _reqID;
: int32_t _respID;
: int32_t _seat;

t**********1
发帖数: 550
9
可劲儿浪费都没事。俺们赌的是1M/s。

【在 n****j 的大作中提到】
: 浪费了点,应该 64 bit 就足够了。另外,一般留几个 bit 做 opcode,比如
: heartbeat 。

t**********1
发帖数: 550
10
zhaoce表示反对。为了照顾他的理解力,协议小修改如下:
struct NetReq {
int64_t _reqID;
int32_t _train; // [0, 5000)
int16_t _start; // [0, 10)
int16_t _stop; // [1, 10]
};
struct NetResp {
int64_t _reqID;
int32_t _respID;
int32_t _seat;
};
唯一变化就是length变成stop。这样我自己算length=stop-start。
z****e
发帖数: 54598
11

没用了,你的算法我看明白了
是傻瓜算法,双循环是最高复杂度
难怪你敢唧唧歪歪,靠,这种算法有个毛现实意义?

【在 t**********1 的大作中提到】
: zhaoce表示反对。为了照顾他的理解力,协议小修改如下:
: struct NetReq {
: int64_t _reqID;
: int32_t _train; // [0, 5000)
: int16_t _start; // [0, 10)
: int16_t _stop; // [1, 10]
: };
: struct NetResp {
: int64_t _reqID;
: int32_t _respID;

1 (共1页)
进入Programming版参与讨论
相关主题
再请教一个c++的简单问题(enumerated constant)C & C++ mixing question
C 中的typedef 一问问魏老师个问题,跟赌约无关
一道面试题我们来做点unit test吧,座位数从3000改为4
is size_t recommended for 64-bit windows porting?How to detect overflow in C?
好虫和魏赌局见证这道题有什么好思路?
how to initialize this struct.get_innerHTML需要什么样的permission?
100%出票还真没在赌约里。如何才能到达内存带宽的极限呢?
C10M 练习2: 空TCP 连接,1M per 4G RAM紧急求助,C语言面试题
相关话题的讨论汇总
话题: int32话题: reqid话题: heartbeat话题: int16话题: int64