C语言JSON-RPC
{
"result": "Hello!"
}
vonzhou@de15:~$ echo "{\"method\":\"exit\"}" | nc localhost 1234
{
"result": "Bye!"
}
the port users will be connecting to
ctx, cJSON * params, cJSON *id) {
ctx, cJSON * params, cJSON *id) {
{
NULL );
NULL );
(* jrpc_function )(jrpc_context *context, cJSON *params, cJSON*
id);
//方法名
//方法地址
//额外信息
* loop; //eventloop类型
//
* procedures ;
*server, int port_number);
*server,
*loop);
*server);
*server);
*server);
*server);
*procedure);
*server,
*server, char *name);
*sa) {
{
sa)->sin_addr );
sa)->sin6_addr);
* conn, char *response) {
= conn-> fd;
1)
Response:\n%s\n" , response);
response, strlen (response));
1);
* conn, int code, char *
message,
= 0;
code);
message);
error_root);
id);
str_result = cJSON_Print(result_root);
* conn, cJSON * result,
= 0;
result);
id);
str_result = cJSON_Print(result_root);
*server,
* conn, char *name, cJSON *params, cJSON *id)
{
= 0;
0;
NULL;
= server-> procedure_count ;
{
name)) {
server-> procedures [i].data ;
params, id);
not found." ), id);
ctx.error_code , ctx.error_message ,
id);
returned, id);
*server,
* conn, cJSON *root) {
!= NULL && method-> type == cJSON_String ) {
== NULL|| params->type == cJSON_Array
{
== NULL|| id->type == cJSON_String
{
it on the reply and deleting the response Object will also delete ID
!= NULL)
? cJSON_CreateString(
Invoked: %s\n" , method->valuestring);
conn, method->valuestring,
JSON sent is not a valid Request object."), NULL);
*loop, ev_io *w) {
*) w)->fd );
*) w)->buffer );
*) w));
*loop, ev_io *w, int revents)
{
*conn;
*server = ( struct jrpc_server *) w->data;
= 0;
event watcher
*) w;
= conn-> fd;
(conn-> buffer_size - 1)) {
new_buffer = realloc(conn-> buffer,
conn->buffer_size *= 2);
== NULL) {
error" );
w);
new_buffer;
conn-> pos, 0, conn->buffer_size -
conn->pos );
be NULL terminated
= conn-> buffer_size - conn->pos -
1;
= read (fd, conn->buffer +
conn-> pos, max_read_size))
w);
{
connection
closed connection.\n" );
w);
= NULL;
bytes_read;
= cJSON_Parse_Stream(conn->buffer , &end_ptr)) != NULL)
{
1) {
str_result = cJSON_Print(root);
JSON Received:\n%s\n" , str_result);
{
it
end_ptr, strlen (end_ptr) + 2);
conn-> pos, 0,
conn->pos - 1);
If
so, just wait for more.
buffer's end
!= (conn->buffer + conn-> pos))
{
{
JSON Received:\n---\n%s\n---\n",
Invalid JSON was received by the server."),
w);
*loop, ev_io *w, int revents)
{
*connection_watcher;
their_addr; // connector's address information
accept(w-> fd, ( struct sockaddr
*) &their_addr,
-1) {
*) w->data)-> debug_level)
{
*) &their_addr), s, sizeof s);
got connection from %s\n" , s);
connection_cb,
w->data ;
1500;
0, 1500);
0;
has no pointer to struct jrpc_server
*) w->data)-> debug_level;
*server, int port_number) {
port_number, loop);
*server,
*loop) {
0, sizeof (struct jrpc_server));
loop;
port_number;
debug_level_env = getenv ("JRPC_DEBUG" );
== NULL)
0;
NULL, 10);
Debug level %d\n" , server->debug_level );
*server) {
hints, *servinfo, *p;
sockaddr;
= 1;
server->port_number );
0, sizeof hints);
use my IP
= getaddrinfo(NULL, PORT, &hints, &servinfo)) != 0) {
%s\n" , gai_strerror(rv));
= servinfo; p != NULL; p = p-> ai_next) {
= socket(p->ai_family , p->ai_socktype ,
p->ai_protocol ))
socket" );
&yes, sizeof (int ))
p->ai_addr , p->ai_addrlen )
== -1) {
bind" );
( struct sockaddr *) &sockaddr, &len)
== -1) {
ntohs( sockaddr.sin_port );
== NULL) {
failed to bind\n" );
structure
5) == -1) {
waiting for connections...\n" );
accept_cb, sockfd, EV_READ);
server;
&server-> listen_watcher );
ev_loop
ev_unloop
EVUNLOOP_ALL
ev_run
ev_break
*server){
0);
*server) {
*server){
= 0; i < server-> procedure_count ; i++){
);
*procedure){
NULL;
NULL;
*server,
data) {
= server-> procedure_count ++;
* ptr = realloc (server->procedures ,
* server->procedure_count );
ptr;
== NULL)
function_pointer;
data;
*server, char *name) {
= 0;
= 0; i < server->procedure_count ; i++){
= server->procedures [i];
server->procedures [i].name )){
);
* ptr = realloc (server->procedures ,
* server->procedure_count );
ptr;
NULL;
: procedure '%s' not found\n", name);
C语言JSON-RPC的更多相关文章
- Go语言_RPC_Go语言的RPC
一 标准库的RPC RPC(Remote Procedure Call,远程过程调用)是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络细节的应用程序通信协议.简单的说就是要像调用本地函数 ...
- 測试JSON RPC远程调用(JSONclient)
#include <string> #include <iostream> #include <curl/curl.h> /* 标题:JSonclient Auth ...
- go语言json技巧
go语言json技巧 本文总结了在项目中遇到的那些关于go语言JSON数据与结构体之间相互转换的问题及解决办法. 基本的序列化 首先我们来看一下Go语言中json.Marshal()(系列化)与jso ...
- C语言JSON序列化/反序列化
最近想找一个C语言处理嵌套结构体和结构体数组的json库,理想的是能够很容易处理复杂结构体嵌套,并且使用简单的,但是没找到比较合适的,于是打算自己封装一个: 两个问题: C语言结构体本身没有元数据,这 ...
- archlinux中c语言的rpc编程
参考:http://www.cs.rutgers.edu/~pxk/rutgers/notes/rpc/ 启动rpc服务端会出现 unable to register 这个错误,据说是要启用 port ...
- Java c# 跨语言Json反序列化首字母大小写问题
C#标准是首字母大写,Java规范是首字母小写,在序列化成Json之后,反序列化会出现反序列化失败的问题.. 从C#反序列化成JavaBean的时候通过如下注解可以直接解决该问题 @JsonNamin ...
- Go语言JSON数据相互转换
目录 结构体转json map转json int转json slice转json json反序列化为结构体 json反序列化为map 结构体转json 结构体转json示例: package main ...
- go语言json转map
package util import ( "encoding/json" "fmt" ) // json转map函数,通用 func JSONToMap(st ...
- Go语言json编码驼峰转下划线、下划线转驼峰
目录 一.需求 二.实现 三.使用 JsonSnakeCase统一转下划线json JsonSnakeCase统一转驼峰json 一.需求 golang默认的结构体json转码出来,都是大写驼峰的,并 ...
- Java程序员的现代RPC指南(Windows版预编译好的Protoc支持C++,Java,Python三种最常用的语言,Thrift则支持几乎主流的各种语言)
Java程序员的现代RPC指南 1.前言 1.1 RPC框架简介 最早接触RPC还是初学Java时,直接用Socket API传东西好麻烦.于是发现了JDK直接支持的RMI,然后就用得不亦乐乎,各种大 ...
随机推荐
- 在 Windows 7 Professional、Enterprise 或 Ultimate 上安装 IIS 7.5
原文 在 Windows 7 Professional.Enterprise 或 Ultimate 上安装 IIS 7.5 应用到: Windows Server 2008 R2 默认情况下,Wind ...
- (大数据工程师学习路径)第三步 Git Community Book----基本用法(下)
一.比较提交 - Git Diff 1.比较提交 - Git Diff 你可以用 git diff 来比较项目中任意两个版本的差异. $ git diff master..test 上面这条命令只显示 ...
- poj1083 思考题
http://poj.org/problem?id=1083 Description The famous ACM (Advanced Computer Maker) Company has rent ...
- Google I/O 2014? No,Android I/O 2014
"你当然能够不相信理想,可是你也应该相信.有一些人相信理想" google I/O今日公布了很多新品,罗列为: Android Wear,Android Auto.Android ...
- Mule ESB-Content-Based Routing Tutorial(2)
承接 Mule ESB-Content-Based Routing Tutorial(1) 五.执行应用程序 完毕创建,配置.并保存你的新的应用程序,您就能够在嵌入Mule的server上执行(包含 ...
- 金蝶K3无法创建数据库,请查看该文件夹的错误的解决方法。
无法创建数据库! 检查你的文件夹C:\XXX\DATA是否存在.并且该系统是不低,或SQL Server服务的启动用户不具备<K3ERP\DBFILE>文件夹的写权限.请改动Windows ...
- 基于GruntJS前端性能优化
在本文中,如何使用GruntJS为了使治疗简单的前端性能优化自己主动,我写了一个完整的样本放在Github上.能够參考一下.关于Yahoo的前端优化规则请參考:Best Practices for S ...
- Sql Server之旅——第五站 确实不得不说的DBCC命令
原文:Sql Server之旅--第五站 确实不得不说的DBCC命令 今天研发中心办年会,晚上就是各自部门聚餐了,我个人喜欢喝干红,在干红中你可以体味到那种酸甜苦辣...人生何尝不是这样呢???正好 ...
- nova-compute[5410]: OSError: [Errno 13] Permission denied: '图像路径'
前几天有 openstack-Nova 创建虚拟机拨弄了一下,结果重新启动后的今天 nova boot 创建虚拟机实例有错误,创建虚拟机出状况 他们是 error 视图 openstack 服务状态 ...
- 至尊快速,国产语言RPP 1.83强势来袭
以下是 R++的性能測试数据:(奔腾 1.86GHZ,測试 3 次取平均值) 执行效率: R++的内部结构和 C++大致同样,所以理论上 R++能够达到和 C++一样的执行速度,眼下 R++已开启汇编 ...