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,然后就用得不亦乐乎,各种大 ...
随机推荐
- WebAPI上传大文件
今天在研究WebAPI的上传与下载,作为Rest的框架,更多是面向资源,就其本身来说,是不会涉及也不应该涉及到大文件的处理,具体多大呢,也就是ASP.NET的限值2G. ASP.NET的pipelin ...
- JavaEE(8) - 本地和远程调用的有状态以及无状态Session EJB
1. 使用NetBeans开发Session Bean #1. 创建项目:File-->New Project-->Java EE-->EJB Module #2. 在项目中创建Se ...
- HTC T328W刷机包 仿三星S5 UI美化 精简 S5落下
ROM介绍 1.三星移植TouchWiz接口; 2.三星增加S4壁纸和图标美化; 3.正确ROM呈流线型; 4.正确ROM优化; 5.完成ROOT权限; 6.短信支持来信息亮屏功能(在短信设置里设置) ...
- eclipse+Java2WSDL+WSDL2Java 2012-12-06 12:32:43| 分类: j2ee |报道|字体大小 认购 一、eclipse如何使用低axis生成wsdl 可以使用
eclipse+Java2WSDL+WSDL2Java 一.eclipse下怎样用axis生成wsdl 能够使用axis提供的Java2WSDL功能生成所要公布类的 WSDL,过程例如以下: 1.在 ...
- Oracle语句优化1
Oracle语句优化1 优化就是选择最有效的方法来执行SQL语句.Oracle优化器选择它认为最有效的 方法来执行SQL语句. 1. IS NULL和IS NOT ...
- SAE+Java+jetty
SAE的java执行环境jetty如servlet该容器,和开放几乎完全访问.有效支持各种jar包.但对于jdk的要件的版本号是非常严格格,这里的版本号是jdk1.6 SAE利用上传war该方式配置j ...
- 从头开始学JavaScript (十二)——Array类型
原文:从头开始学JavaScript (十二)--Array类型 一.数组的创建 注:ECMAscript数组的每一项都可以保存任何类型的数据 1.1Array构造函数 var colors = ne ...
- crawler_httpurlconnection_自动编码识别
核心思想: 1:从响应头中读取 [命中解流准确率最高] 2:如果响应头中没有,打开流从源码中读取,[取舍,如果有一般在前30行会有,前100行中寻找] 3:如果还没有,根据字节码code位置,字符识别 ...
- linux_mac_配置itrem2 rz sz_bug处理
0:传输 .jar 等文件有问题 是 添加 sz -bye 以二进制流方式传输 1:安装 homebrew 2: brew install lrzsz 3:搜索 iterm2-recv-zmod ...
- HDU 3127 WHUgirls(完全背包)
HDU 3127 WHUgirls(完全背包) http://acm.hdu.edu.cn/showproblem.php? pid=3127 题意: 如今有一块X*Y的矩形布条, 然后有n种规格的x ...