增加使用说明
大石头 authored at 2025-09-21 21:43:58
3.42 KiB
NewLife.Remoting
# ApiServer ʹÓÃ˵Ã÷ ±¾ÎĽéÉÜ `ApiServer` µÄ¹¦ÄÜÓëÓ÷¨£¬º­¸Ç·þÎñÆô¶¯¡¢¿ØÖÆÆ÷×¢²á¡¢ÇëÇó´¦Àí¡¢ÈÏÖ¤¡¢¿É¹Û²âÐÔ¡¢¹ã²¥ÓëÓë Razor Pages µÄ¼¯³É½¨Ò飨×÷Ϊºǫ́·þÎñ»ò±ß³µ£©¡£ ## 1. ¸ÅÊö - ×÷ÓãºÓ¦Óòã RPC ·þÎñÆ÷£¬»ùÓÚ `IApiServer`£¨`ApiNetServer` »ò `ApiHttpServer`£©³ÐÔØÍøÂç»á»°¡£ - ´«Ê䣺Tcp / Udp / Http / WebSocket£¨È¡¾öÓÚ `Use(NetUri)` µÄµØÖ·ÀàÐÍ£©¡£ - ÆõÔ¼£º»ùÓÚ `IMessage`/`ApiMessage` Óë `IEncoder`£»Ä¬ÈÏ JSON£¬¿ÉÇл» Http ÓïÒå¡£ ## 2. ¿ìËÙ¿ªÊ¼£¨Tcp£© ```csharp var server = new ApiServer(12345) { Log = XTrace.Log }; server.Register(new DemoController()); server.Start(); Console.ReadLine(); server.Stop("quit"); ``` - Ò²¿ÉʹÓà `Use(new NetUri("tcp://*:12345"))` Ö¸¶¨¼àÌýµØÖ·¡£ - Http ¼àÌý£º`Use(new NetUri("http://*:8080"))` ½«Ê¹Óà `ApiHttpServer`¡£ ## 3. ¿ØÖÆÆ÷Ó붯×÷×¢²á - ×Ô¶¯×¢²á£º¹¹Ô캯ÊýÒÑ×¢²áÄÚÖà `ApiController`£¬Ìṩ `api/all`¡¢`api/info` µÈͨÓýӿڡ£ - ÊÖ¶¯×¢²á£º ```csharp server.Register(new MyController()); // ×¢²á¿ØÖÆÆ÷È«²¿¹«¿ª·½·¨ server.Register(new MyController(), "Echo"); // ½ö×¢²áÃüÃû·½·¨ server.Register<MyController>(); // ×¢²áÀàÐÍ£¨ÄÚ²¿»á´´½¨ÊµÀý£© ``` - ÒÀÀµ×¢È룺ÉèÖà `ServiceProvider` ºó£¬´´½¨¿ØÖÆÆ÷ʵÀýʱ¿É´ÓÈÝÆ÷½âÎö¡£ ## 4. ÇëÇó´¦ÀíÁ÷³Ì - `Process(session, msg, serviceProvider)`£º - ½âÂë `IMessage` Ϊ `ApiMessage`£¬°´ `action` ·Óɵ½ `IApiHandler` Ö´ÐС£ - ²¶»ñÒì³£²¢Ó³ÉäΪ `ApiCode` Óë´íÎóÏûÏ¢£¨Êý¾Ý¿âÒì³£ÍÑÃô£©¡£ - `OneWay` ÇëÇó²»·µ»ØÏìÓ¦¡£ - Èô `UseHttpStatus=true`£¬¶Ô Http ³¡¾°Ê¹Óà HTTP ״̬Âë±í´ï½á¹û¡£ - finally ÖмǼÂý´¦ÀíÈÕÖ¾£¨³¬¹ý `SlowTrace`£©¡£ ## 5. ÈÏÖ¤Óë»á»° - token ģʽ£º - ¿Í»§¶Ë¿ÉÔÚ²ÎÊýЯ´ø `Token`¡£ - ·þÎñ¶Ë¿ÉÔÚ `IApiHandler.Prepare` »ò¿ØÖÆÆ÷ÖÐУÑé Token£¬²¢½«Óë¸Ã Token ¹ØÁªµÄ״̬·ÅÈë `IApiSession.Items`¡£ - `OnProcess`£ºÄ¬ÈÏίÍиø `Handler.Execute`£¬¿ÉÖØÐ´ÒÔʵÏÖͳһµÄ¼øÈ¨ÓëÀ¹½Ø¡£ ## 6. ¿É¹Û²âÐÔÓëͳ¼Æ - ÈÕÖ¾£º`ILog Log`£¨·þÎñÆ÷ÈÕÖ¾£©¡¢`SessionLog`£¨»á»°ÈÕÖ¾£©¡£ - ×·×Ù£º`ITracer? Tracer`¡£ - Âý´¦Àí£º`SlowTrace`£¨ºÁÃ룩¡£³¬¹ýãÐÖµÊä³ö°üº¬ Action¡¢Code¡¢ºÄʱµÄÂý´¦ÀíÈÕÖ¾¡£ - ͳ¼Æ£º`ICounter? StatProcess` + `StatPeriod`£¨Ã룩¶¨ÆÚÊä³ö´¦Àíͳ¼ÆÓëµ×²ãÍøÂç״̬¡£ ## 7. WebSocket Óë Http - WebSocket£º×Ô¶¯Çл»µ½ `WebSocketClientCodec` ½øÐÐÏûÏ¢Ö¡±à½âÂë¡£ - Http£º`ApiHttpServer` ÅäºÏ `HttpEncoder` Ö§³Ö GET/POST Ó³Éäµ½ `ApiMessage`£»¿Éͨ¹ý `UseHttpStatus` Çл»Îª HTTP ״̬Âë±í´ï½á¹û¡£ ## 8. ¶Ë¿ÚÓëµØÖ·¸´Óà - `ReuseAddress`£ºÔÊÐí¶à½ø³Ì¸´Óö˿ڣ¬ÓÃÓÚ¹ö¶¯ÖØÆô»ò¶à½ø³Ì¼àÌý£¨Ðèϵͳ֧³Ö£©¡£ - `Multiplex`£ºÍ¬Ò» TCP Á¬½ÓÔÊÐíÔÚδÍê³ÉµÄÇëÇóÆÚ¼ä²¢Ðд¦ÀíÐÂÇëÇó£¨ÌáÉýÍÌÍ£©¡£ ## 9. ¹ã²¥ - `InvokeAll(action, args)`£ºÏòËùÓлỰµ¥Ïò·¢ËÍ֪ͨ£»·µ»Ø³É¹¦»á»°Êý¡£ ## 10. ×ÊÔ´ÊÍ·Å - `Stop(reason)`£ºÍ£Ö¹ÍøÂç·þÎñÆ÷Óëͳ¼Æ¶¨Ê±Æ÷¡£ - `Dispose()`£ºÊÍ·Å×ÊÔ´²¢½â³ýÓëĬÈÏ `ApiController` µÄÏ໥ÒýÓᣠ## 11. ÔÚ ASP.NET Core Razor Pages Öеɣ¨×÷Ϊºǫ́·þÎñ£© - ×÷ΪËÞÖ÷Äڵĺǫ́·þÎñ£¨²»Ö±½Ó±©Â¶ÔÚ¹«Íø£©Ê¾Àý£º ```csharp builder.Services.AddSingleton(sp => { var svr = new ApiServer(12345) { Log = XTrace.Log, UseHttpStatus = false }; // ×¢²áÒµÎñ¿ØÖÆÆ÷ svr.Register(new MyController()); // Æô¶¯ svr.Start(); return svr; }); ``` - ×¢Ò⣺ - ʹÓà `UseHttpStatus=false` ±£³ÖÓëĬÈÏ JSON ÓïÒ弿ÈÝ£»ÈôÃæÏò´¿ Http ¿Í»§¶Ë¿ÉÉèΪ true¡£ - ½«·þÎñ¼àÌýÔÚÄÚÍøµØÖ·£¬¹©Í¬»úµÄ Razor Pages µ÷Ó㬻òͨ¹ý·´Ïò´úÀí±©Â¶±ØÒª½Ó¿Ú¡£ ## 12. ³£¼ûÎÊÌâ - Q£ºÈçºÎ²é¿´µ±Ç°ÓÐÄÄЩÒÑ×¢²á¶¯×÷£¿A£º`ShowService()` »áÔÚÆô¶¯Ê±Êä³ö·þÎñÁÐ±í¡£ - Q£ºÈçºÎ×Ô¶¨Òå·ÓÉ»òÀ¹½Ø£¿A£ºÌṩ×Ô¶¨Òå `IApiHandler` ²¢¸³¸ø `Handler`£¬»òÖØÐ´ `OnProcess`¡£ - Q£ºÊÇ·ñÖ§³Ö Udp£¿A£ºµ×²ã `ApiNetServer` Ö§³Ö NetType£»Ò»°ãÍÆ¼ö Tcp/Http/WebSocket¡£