1.向web端发送二进制数据与文本数据时注意
//lws_write(wsi, data->buf+LWS_PRE, isz, LWS_WRITE_BINARY);
//lws_write(wsi, data->buf+LWS_PRE, isz, LWS_WRITE_TEXT);
2.使用信号量 一生产者一消费者同步
3.未尝试将senddata数据直接拷贝到data->buf+ LWS_PRE后面区域, 而不借助成员变量.
map<long,string>map_wsi_token;// 存wsi指针为key, token为字符串
static volatile int exit_sig = 0;
#define MAX_PAYLOAD_SIZE 13 * 1024
void sighdl(int sig) {
lwsl_notice("%d traped", sig);
exit_sig = 1;
}
// 传输图像
struct lws* g_wsi = NULL;
long g_wsi_port = 9000;
char* g_wsi_protocolname = "hello";
MyThread * g_pThread = NULL;
/**
* 会话上下文对象,结构根据需要自定义
*/
struct session_data {
int msg_count;
unsigned char buf[LWS_PRE + MAX_PAYLOAD_SIZE];
int len;
bool bin;
bool fin;
};
static int protocol_my_callback(struct lws* wsi, enum lws_callback_reasons reason, void* user, void* in, size_t len) {
struct session_data* data = (struct session_data*)user;
switch (reason)
{
case LWS_CALLBACK_FILTER_PROTOCOL_CONNECTION: //这里的wsi中才有url内容
// 客户端连上来看看是否最新token
{
char content_length_str[200] = {0};
lws_hdr_copy(wsi,content_length_str,200,(lws_token_indexes)0);
char chartoken[200] = {0};
g_pThread->GetNewToken(chartoken);
if (chartoken[0]=='\0') // 没有最新的token
{
return -1;
}
else