mm_os 3.3.1 → 4.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (380) hide show
  1. package/LICENSE +21 -201
  2. package/README.md +491 -99
  3. package/README_EN.md +498 -0
  4. package/adapter/adapter.js +431 -0
  5. package/adapter/custom_persistence.js +660 -0
  6. package/adapter/mqtt.js +273 -0
  7. package/adapter/socket.js +113 -0
  8. package/adapter/web.js +67 -0
  9. package/adapter/websocket.js +146 -0
  10. package/com/api/com.json +5 -0
  11. package/{core/com → com}/api/config.tpl.json +8 -8
  12. package/com/api/drive.js +708 -0
  13. package/com/api/index.js +198 -0
  14. package/com/api/oauth.js +200 -0
  15. package/com/api/script.tpl.js +32 -0
  16. package/com/cmd/README.md +11 -0
  17. package/com/cmd/com.json +5 -0
  18. package/com/cmd/config.tpl.json +122 -0
  19. package/com/cmd/drive.js +1548 -0
  20. package/com/cmd/index.js +1066 -0
  21. package/com/cmd/msg.json +48 -0
  22. package/com/cmd/nlp.js +525 -0
  23. package/com/cmd/script.tpl.js +32 -0
  24. package/com/db/com.json +5 -0
  25. package/com/db/drive.js +1999 -0
  26. package/com/db/index.js +242 -0
  27. package/{core/com → com}/event/README.md +4 -4
  28. package/com/event/com.json +5 -0
  29. package/{core/com → com}/event/config.tpl.json +18 -18
  30. package/com/event/drive.js +59 -0
  31. package/com/event/index.js +409 -0
  32. package/com/event/script.tpl.js +23 -0
  33. package/com/mqtt/com.json +5 -0
  34. package/{core/com → com}/mqtt/config.tpl.json +3 -5
  35. package/com/mqtt/drive.js +676 -0
  36. package/com/mqtt/index.js +822 -0
  37. package/com/mqtt/mm_mqtt.js +425 -0
  38. package/com/mqtt/script.tpl.js +723 -0
  39. package/com/nav/com.json +5 -0
  40. package/com/nav/config.tpl.json +84 -0
  41. package/com/nav/drive.js +702 -0
  42. package/com/nav/index.js +231 -0
  43. package/{core/com → com}/nav/tpl/admin_pc/page_config.vue +280 -280
  44. package/{core/com → com}/nav/tpl/admin_pc/page_config_form.vue +194 -194
  45. package/com/nav/tpl/admin_pc/page_form.vue +180 -0
  46. package/com/nav/tpl/admin_pc/page_view.vue +124 -0
  47. package/com/nav/tpl/dev_pc/page_default.vue +247 -0
  48. package/com/nav/tpl/dev_pc/page_type.vue +313 -0
  49. package/com/nav/tpl/home_pc/page_default.vue +234 -0
  50. package/com/nav/tpl/home_pc/page_form.vue +137 -0
  51. package/com/nav/tpl/home_pc/page_list.vue +234 -0
  52. package/com/nav/tpl/home_pc/page_nav.vue +221 -0
  53. package/com/nav/tpl/home_pc/page_type.vue +234 -0
  54. package/com/nav/tpl/home_pc/page_view.vue +125 -0
  55. package/com/nav/tpl/home_phone/page_channel.vue +234 -0
  56. package/com/nav/tpl/home_phone/page_default.vue +234 -0
  57. package/com/nav/tpl/home_phone/page_form.vue +137 -0
  58. package/com/nav/tpl/home_phone/page_nav.vue +237 -0
  59. package/com/nav/tpl/home_phone/page_type.vue +234 -0
  60. package/com/nav/tpl/home_phone/page_view.vue +125 -0
  61. package/com/nav/viewmodel.js +446 -0
  62. package/com/param/com.json +5 -0
  63. package/{core/com → com}/param/config.tpl.json +7 -1
  64. package/com/param/drive.js +502 -0
  65. package/com/param/index.js +155 -0
  66. package/com/param/script.tpl.js +12 -0
  67. package/com/pendant/com.json +5 -0
  68. package/{core/com/component → com/pendant}/config.tpl.json +15 -13
  69. package/com/pendant/drive.js +204 -0
  70. package/com/pendant/index.js +441 -0
  71. package/com/pendant/pendant.html +16 -0
  72. package/com/pendant/script.tpl.js +18 -0
  73. package/com/socket/com.json +5 -0
  74. package/com/socket/config.tpl.json +12 -0
  75. package/com/socket/drive.js +651 -0
  76. package/com/socket/index.js +351 -0
  77. package/com/socket/script.tpl.js +41 -0
  78. package/com/sql/com.json +5 -0
  79. package/{core/com → com}/sql/config.tpl.json +13 -9
  80. package/com/sql/drive.js +1259 -0
  81. package/com/sql/index.js +150 -0
  82. package/com/sql/script.tpl.js +47 -0
  83. package/com/static/com.json +5 -0
  84. package/{core/com → com}/static/config.tpl.json +10 -6
  85. package/com/static/drive.js +194 -0
  86. package/com/static/index.js +226 -0
  87. package/com/static/script.tpl.js +28 -0
  88. package/com/task/com.json +5 -0
  89. package/{core/com → com}/task/config.tpl.json +4 -6
  90. package/com/task/drive.js +405 -0
  91. package/com/task/index.js +148 -0
  92. package/com/task/script.tpl.js +37 -0
  93. package/com/template/com.json +5 -0
  94. package/com/template/config.tpl.json +16 -0
  95. package/com/template/drive.js +80 -0
  96. package/com/template/index.js +141 -0
  97. package/com.js +156 -0
  98. package/common/README.md +2 -0
  99. package/common/handler/msg/handler.json +22 -0
  100. package/common/handler/msg/index.js +23 -0
  101. package/common/handler/player/handler.json +22 -0
  102. package/common/handler/player/index.js +287 -0
  103. package/common/handler/user/handler.json +22 -0
  104. package/common/handler/user/index.js +23 -0
  105. package/common/middleware/web_after/index.js +29 -0
  106. package/common/middleware/web_after/middleware.json +9 -0
  107. package/common/middleware/web_base/index.js +113 -0
  108. package/common/middleware/web_base/middleware.json +19 -0
  109. package/common/middleware/web_before/index.js +33 -0
  110. package/common/middleware/web_before/middleware.json +9 -0
  111. package/common/middleware/web_cors/index.js +87 -0
  112. package/common/middleware/web_cors/middleware.json +24 -0
  113. package/common/middleware/web_error/index.js +119 -0
  114. package/common/middleware/web_error/middleware.json +18 -0
  115. package/common/middleware/web_ip/index.js +15 -0
  116. package/common/middleware/web_ip/middleware.json +14 -0
  117. package/common/middleware/web_logger/index.js +156 -0
  118. package/common/middleware/web_logger/middleware.json +14 -0
  119. package/common/middleware/web_main/index.js +24 -0
  120. package/common/middleware/web_main/middleware.json +9 -0
  121. package/common/middleware/web_static/index.js +73 -0
  122. package/common/middleware/web_static/middleware.json +54 -0
  123. package/common/middleware/web_waf/index.js +385 -0
  124. package/common/middleware/web_waf/middleware.json +13 -0
  125. package/common/model/msg/index.js +88 -0
  126. package/common/model/msg/model.json +401 -0
  127. package/common/model/player/index.js +63 -0
  128. package/common/model/player/model.json +185 -0
  129. package/common/model/user/index.js +11 -0
  130. package/common/model/user/model.json +219 -0
  131. package/core/app/config.tpl.json +67 -0
  132. package/core/app/index.js +632 -0
  133. package/core/app/script.tpl.js +52 -0
  134. package/core/channel/index.js +899 -0
  135. package/core/channel/matcher.js +585 -0
  136. package/core/com/config.tpl.json +16 -0
  137. package/core/com/index.js +74 -0
  138. package/core/com/script.tpl.js +5 -0
  139. package/core/component/component.js +42 -0
  140. package/core/component/config.tpl.json +63 -0
  141. package/core/component/index.js +273 -0
  142. package/core/component/script.tpl.js +19 -0
  143. package/core/controller/config.tpl.json +14 -0
  144. package/core/controller/index.js +373 -0
  145. package/core/controller/script.tpl.js +27 -0
  146. package/core/factory/config.tpl.json +14 -0
  147. package/core/factory/entity.js +275 -0
  148. package/core/factory/index.js +241 -0
  149. package/core/factory/script.tpl.js +16 -0
  150. package/core/game/bat/index.js +137 -0
  151. package/core/game/bat/world.js +622 -0
  152. package/core/game/config.tpl.json +16 -0
  153. package/core/game/entity_admin.js +230 -0
  154. package/core/game/index.js +186 -0
  155. package/core/handler/config.tpl.json +22 -0
  156. package/core/handler/index.js +181 -0
  157. package/core/handler/script.tpl.js +23 -0
  158. package/core/logic/config.tpl.json +14 -0
  159. package/core/logic/index.js +59 -0
  160. package/core/logic/script.tpl.js +19 -0
  161. package/core/middleware/config.tpl.json +16 -0
  162. package/core/middleware/index.js +125 -0
  163. package/core/middleware/script.tpl.js +37 -0
  164. package/core/mod/config.tpl.json +22 -0
  165. package/core/mod/index.js +130 -0
  166. package/core/mod/script.tpl.js +34 -0
  167. package/core/model/config.tpl.json +219 -0
  168. package/core/model/index.js +272 -0
  169. package/core/model/model.js +27 -0
  170. package/core/model/script.tpl.js +20 -0
  171. package/core/notifier/config.tpl.json +14 -0
  172. package/core/notifier/index.js +77 -0
  173. package/core/notifier/script.tpl.js +20 -0
  174. package/core/plugin/config.tpl.json +24 -0
  175. package/core/plugin/index.js +232 -0
  176. package/core/plugin/script.tpl.js +51 -0
  177. package/core/pusher/config.tpl.json +14 -0
  178. package/core/pusher/index.js +161 -0
  179. package/core/pusher/script.tpl.js +20 -0
  180. package/core/room/bat/index.js +170 -0
  181. package/core/room/bat/room.js +524 -0
  182. package/core/room/config.tpl.json +20 -0
  183. package/core/room/index.js +249 -0
  184. package/core/room/room.js +61 -0
  185. package/core/scene/config.tpl.json +14 -0
  186. package/core/scene/index.js +466 -0
  187. package/core/scene/loop.js +1255 -0
  188. package/core/scene/map.js +28 -0
  189. package/core/scene/script.tpl.js +22 -0
  190. package/core/sender/config.tpl.json +14 -0
  191. package/core/sender/index.js +79 -0
  192. package/core/sender/script.tpl.js +20 -0
  193. package/core/service/config.tpl.json +14 -0
  194. package/core/service/index.js +100 -0
  195. package/core/service/script.tpl.js +25 -0
  196. package/core/store/config.tpl.json +26 -0
  197. package/core/store/index.js +1755 -0
  198. package/core/store/script.tpl.js +22 -0
  199. package/core/store/sql.js +1464 -0
  200. package/core/system/config.tpl.json +18 -0
  201. package/core/system/index.js +312 -0
  202. package/core/system/script.tpl.js +77 -0
  203. package/core/view/config.tpl.json +14 -0
  204. package/core/view/index.js +91 -0
  205. package/core/view/script.tpl.js +20 -0
  206. package/core/zone/bat/index.js +725 -0
  207. package/core/zone/config.tpl.json +54 -0
  208. package/core/zone/index.js +614 -0
  209. package/core/zone/script.tpl.js +10 -0
  210. package/core/zone/zone_bat.js +136 -0
  211. package/core//345/237/272/347/261/273/346/250/241/345/235/227/346/270/205/345/215/225.md +24 -0
  212. package/index.js +17 -333
  213. package/os.js +57 -0
  214. package/package.json +58 -58
  215. package/server.js +598 -0
  216. package/README.en.md +0 -36
  217. package/conf.json +0 -3
  218. package/core/base/mqtt/index.js +0 -1110
  219. package/core/base/mqtt/lib.js +0 -40
  220. package/core/base/web/index.js +0 -245
  221. package/core/com/api/com.json +0 -4
  222. package/core/com/api/drive.js +0 -668
  223. package/core/com/api/index.js +0 -108
  224. package/core/com/api/oauth.js +0 -158
  225. package/core/com/api/script.js +0 -32
  226. package/core/com/app/README.md +0 -3
  227. package/core/com/app/com.json +0 -4
  228. package/core/com/app/config.tpl.json +0 -16
  229. package/core/com/app/drive.js +0 -309
  230. package/core/com/app/index.js +0 -211
  231. package/core/com/app/script.js +0 -155
  232. package/core/com/cmd/com.json +0 -4
  233. package/core/com/cmd/config.tpl.json +0 -66
  234. package/core/com/cmd/drive.js +0 -513
  235. package/core/com/cmd/index.js +0 -354
  236. package/core/com/cmd/old/5w2h.js +0 -54
  237. package/core/com/cmd/old/drive.js +0 -423
  238. package/core/com/cmd/script.js +0 -11
  239. package/core/com/component/README.md +0 -3
  240. package/core/com/component/com.json +0 -4
  241. package/core/com/component/component.html +0 -16
  242. package/core/com/component/drive.js +0 -197
  243. package/core/com/component/index.js +0 -312
  244. package/core/com/component/script.js +0 -18
  245. package/core/com/db/com.json +0 -4
  246. package/core/com/db/drive.js +0 -1160
  247. package/core/com/db/index.js +0 -176
  248. package/core/com/event/com.json +0 -4
  249. package/core/com/event/drive.js +0 -133
  250. package/core/com/event/index.js +0 -345
  251. package/core/com/event/script.js +0 -26
  252. package/core/com/eventer/com.js +0 -477
  253. package/core/com/eventer/com.json +0 -4
  254. package/core/com/middleware/com.js +0 -154
  255. package/core/com/middleware/com.json +0 -4
  256. package/core/com/middleware/config.tpl.json +0 -8
  257. package/core/com/middleware/script.js +0 -9
  258. package/core/com/mqtt/com.json +0 -4
  259. package/core/com/mqtt/drive.js +0 -600
  260. package/core/com/mqtt/index.js +0 -572
  261. package/core/com/mqtt/mm_mqtt.js +0 -330
  262. package/core/com/mqtt/script.js +0 -604
  263. package/core/com/msg/com.js +0 -296
  264. package/core/com/msg/com.json +0 -4
  265. package/core/com/nav/com.json +0 -4
  266. package/core/com/nav/config.tpl.json +0 -75
  267. package/core/com/nav/drive.js +0 -549
  268. package/core/com/nav/index.js +0 -182
  269. package/core/com/nav/tpl/admin_pc/page_form.vue +0 -180
  270. package/core/com/nav/tpl/admin_pc/page_view.vue +0 -124
  271. package/core/com/nav/tpl/dev_pc/page_default.vue +0 -247
  272. package/core/com/nav/tpl/dev_pc/page_type.vue +0 -313
  273. package/core/com/nav/tpl/home_pc/page_default.vue +0 -234
  274. package/core/com/nav/tpl/home_pc/page_form.vue +0 -137
  275. package/core/com/nav/tpl/home_pc/page_list.vue +0 -234
  276. package/core/com/nav/tpl/home_pc/page_nav.vue +0 -221
  277. package/core/com/nav/tpl/home_pc/page_type.vue +0 -234
  278. package/core/com/nav/tpl/home_pc/page_view.vue +0 -125
  279. package/core/com/nav/tpl/home_phone/page_channel.vue +0 -234
  280. package/core/com/nav/tpl/home_phone/page_default.vue +0 -234
  281. package/core/com/nav/tpl/home_phone/page_form.vue +0 -137
  282. package/core/com/nav/tpl/home_phone/page_nav.vue +0 -237
  283. package/core/com/nav/tpl/home_phone/page_type.vue +0 -234
  284. package/core/com/nav/tpl/home_phone/page_view.vue +0 -125
  285. package/core/com/nav/viewmodel.js +0 -296
  286. package/core/com/param/drive.js +0 -366
  287. package/core/com/param/index.js +0 -80
  288. package/core/com/param/script.js +0 -12
  289. package/core/com/param/test.js +0 -98
  290. package/core/com/plugin/README.md +0 -3
  291. package/core/com/plugin/com.json +0 -4
  292. package/core/com/plugin/config.tpl.json +0 -26
  293. package/core/com/plugin/drive.js +0 -536
  294. package/core/com/plugin/index.js +0 -259
  295. package/core/com/plugin/script.js +0 -213
  296. package/core/com/rpc/com.json +0 -4
  297. package/core/com/rpc/drive.js +0 -160
  298. package/core/com/rpc/index.js +0 -87
  299. package/core/com/rpc/rpc.js +0 -118
  300. package/core/com/socket/com.json +0 -4
  301. package/core/com/socket/config.tpl.json +0 -14
  302. package/core/com/socket/drive.js +0 -403
  303. package/core/com/socket/index.js +0 -62
  304. package/core/com/socket/script.js +0 -42
  305. package/core/com/sql/drive.js +0 -1087
  306. package/core/com/sql/index.js +0 -83
  307. package/core/com/sql/script.js +0 -48
  308. package/core/com/static/com.json +0 -4
  309. package/core/com/static/drive.js +0 -220
  310. package/core/com/static/index.js +0 -149
  311. package/core/com/static/script.js +0 -28
  312. package/core/com/task/com.json +0 -4
  313. package/core/com/task/drive.js +0 -403
  314. package/core/com/task/index.js +0 -110
  315. package/core/com/task/script.js +0 -37
  316. package/core/com/timer/com.js +0 -217
  317. package/core/com/timer/com.json +0 -4
  318. package/core/com/tpl/com.js +0 -19
  319. package/core/com/tpl/com.json +0 -4
  320. package/lib/actions.js +0 -50
  321. package/lib/base.js +0 -361
  322. package/lib/com.js +0 -29
  323. package/lib/ref.js +0 -121
  324. package/middleware/cors/index.js +0 -119
  325. package/middleware/cors/middleware.json +0 -20
  326. package/middleware/csrf/index.js +0 -202
  327. package/middleware/csrf/middleware.json +0 -24
  328. package/middleware/ip_firewall/index.js +0 -476
  329. package/middleware/ip_firewall/middleware.json +0 -109
  330. package/middleware/mqtt_base/index.js +0 -10
  331. package/middleware/mqtt_base/middleware.json +0 -11
  332. package/middleware/security_audit/index.js +0 -543
  333. package/middleware/security_audit/middleware.json +0 -48
  334. package/middleware/waf/index.js +0 -343
  335. package/middleware/waf/middleware.json +0 -10
  336. package/middleware/waf_ddos/index.js +0 -520
  337. package/middleware/waf_ddos/middleware.json +0 -38
  338. package/middleware/waf_xss/index.js +0 -269
  339. package/middleware/waf_xss/middleware.json +0 -18
  340. package/middleware/web_after/index.js +0 -33
  341. package/middleware/web_after/middleware.json +0 -10
  342. package/middleware/web_base/index.js +0 -90
  343. package/middleware/web_base/middleware.json +0 -10
  344. package/middleware/web_before/index.js +0 -27
  345. package/middleware/web_before/middleware.json +0 -10
  346. package/middleware/web_check/index.js +0 -28
  347. package/middleware/web_check/middleware.json +0 -10
  348. package/middleware/web_main/index.js +0 -28
  349. package/middleware/web_main/middleware.json +0 -10
  350. package/middleware/web_proxy/index.js +0 -37
  351. package/middleware/web_proxy/middleware.json +0 -10
  352. package/middleware/web_render/index.js +0 -87
  353. package/middleware/web_render/middleware.json +0 -10
  354. package/middleware/web_socket/index.js +0 -34
  355. package/middleware/web_socket/middleware.json +0 -10
  356. package/middleware/web_static/index.js +0 -115
  357. package/middleware/web_static/middleware.json +0 -10
  358. /package/{core/com → com}/api/README.md +0 -0
  359. /package/{core/com → com}/db/README.md +0 -0
  360. /package/{core/com → com}/mqtt/README.md +0 -0
  361. /package/{core/com → com}/nav/README.md +0 -0
  362. /package/{core/com → com}/nav/tpl/admin_pc/page_channel.vue +0 -0
  363. /package/{core/com → com}/nav/tpl/admin_pc/page_default.vue +0 -0
  364. /package/{core/com → com}/nav/tpl/admin_pc/page_lang.vue +0 -0
  365. /package/{core/com → com}/nav/tpl/admin_pc/page_nav.vue +0 -0
  366. /package/{core/com → com}/nav/tpl/admin_pc/page_table.vue +0 -0
  367. /package/{core/com → com}/nav/tpl/admin_pc/page_type.vue +0 -0
  368. /package/{core/com → com}/nav/tpl/dev_pc/page_channel.vue +0 -0
  369. /package/{core/com → com}/nav/tpl/dev_pc/page_config.vue +0 -0
  370. /package/{core/com → com}/nav/tpl/dev_pc/page_form.vue +0 -0
  371. /package/{core/com → com}/nav/tpl/dev_pc/page_nav.vue +0 -0
  372. /package/{core/com → com}/nav/tpl/dev_pc/page_table.vue +0 -0
  373. /package/{core/com → com}/nav/tpl/home_pc/page_channel.vue +0 -0
  374. /package/{core/com → com}/nav/tpl/home_phone/page_list.vue +0 -0
  375. /package/{core/com → com}/param/README.md +0 -0
  376. /package/{core/com/cmd → com/pendant}/README.md +0 -0
  377. /package/{core/com → com}/socket/README.md +0 -0
  378. /package/{core/com → com}/sql/README.md +0 -0
  379. /package/{core/com → com}/static/README.md +0 -0
  380. /package/{core/com → com}/task/README.md +0 -0
package/README.md CHANGED
@@ -1,105 +1,497 @@
1
- # 服务端框架
2
-
3
- #### 介绍
4
- 这是一个**5星评级**服务端框架,用于快速构建网站、游戏、小程序、AIOT服务端。框架经过全面优化,达到了5星评级标准,在性能、稳定性、安全性、可维护性、功能完整性和二次开发上手难度方面均有出色表现。
5
-
6
- #### 软件架构
7
- 由koa网站框架 + art-template模板引擎 + mm(热拔插)插件机制 + mysql数据库 + redis缓存 + jwt鉴权 + 等等组成。
8
-
9
- #### 5星评级达成情况
10
-
11
- ✅ **性能**: 5/5 - 实现了高效缓存机制、性能监控和优化的路由系统
12
- ✅ **稳定性**: 5/5 - 实现了熔断器模式、自动重试机制和完善的错误处理
13
- **安全性**: 5/5 - 实现了HTTPS支持、CSRF保护、速率限制和敏感数据保护
14
- ✅ **可维护性**: 5/5 - 实现了单元测试框架、统一日志系统和代码规范
15
- ✅ **功能完整性**: 5/5 - 实现了全面的路由系统、配置管理和完整工具链
16
- ✅ **二次开发上手难度**: 5/5 (极简) - 提供了详细的入门指南、API文档和丰富的示例代码
17
-
18
- #### 5星功能亮点
19
-
20
- ### ✅ 性能优化
21
- - **缓存集成** - 高效数据缓存机制减少数据库压力
22
- - **性能监控** - 内置性能指标收集和分析
23
- - **优化的路由系统** - 支持RESTful API和参数验证
24
-
25
- ### ✅ 稳定性增强
26
- - **熔断器模式** - 防止级联失败,提高系统稳定性
27
- - **自动重试机制** - 关键操作智能重试
28
- - **统一错误处理** - 完善的错误捕获和日志记录
29
-
30
- ### ✅ 安全性提升
31
- - **HTTPS支持** - 完整的TLS/SSL配置
32
- - **CSRF保护** - 防止跨站请求伪造
33
- - **速率限制** - 防止暴力攻击和DoS攻击
34
- - **敏感数据保护** - 自动检测和过滤敏感信息
35
-
36
- ### ✅ 可维护性保障
37
- - **单元测试框架** - 内置测试工具和断言库
38
- - **统一日志系统** - 结构化日志便于问题排查
39
- - **代码规范** - 遵循现代JavaScript最佳实践
40
-
41
- ### ✅ 功能完整性
42
- - **路由系统** - 支持RESTful、中间件、路由组和参数验证
43
- - **配置管理** - 增强版配置管理支持多格式和环境变量
44
- - **工具集合** - 丰富的工具函数支持各类开发需求
45
-
46
- #### 安装教程
47
- 新建一个目录,然后在当前打开命令提示符,输入以下命令进行初始化
48
- ``` command
49
- npm init
1
+ # MOS 服务端架构
2
+
3
+ [![npm version](https://badge.fury.io/js/mm_os.svg)](https://badge.fury.io/js/mm_os)
4
+ [![npm downloads](https://img.shields.io/npm/dm/mm_os.svg)](https://www.npmjs.com/package/mm_os)
5
+ [![License](https://img.shields.io/npm/l/mm_os.svg)](https://gitee.com/qiuwenwu91/mm_os/blob/master/LICENSE)
6
+
7
+ ## 项目简介
8
+
9
+ MOS 是一个轻量级的服务端架构,提供了完整的服务端开发框架,包括 Web、WebSocket、MQTT、Socket 等多种通信协议支持,以及丰富的组件和模块。
10
+
11
+ 适用于快速构建网站、小程序后台、AI应用、物联网应用、中小型游戏服务端。
12
+
13
+ ## 核心功能
14
+
15
+ - **多协议支持**:Web、WebSocket、MQTT、Socket
16
+ - **模块化设计**:应用、模组、中间件、通知器、消息发送器、广播器
17
+ - **基础设施**:数据库、缓存、日志、文件管理
18
+ - **事件驱动**:基于事件总线的异步处理
19
+ - **插件系统**:支持功能扩展
20
+
21
+ ## 设计理念:配置与逻辑分离
22
+
23
+ MOS 框架的核心设计原则是 **配置与逻辑分离**。无论是 `core` 核心模块还是 `com` 公共组件,每个功能模块都遵循统一的结构:
24
+
25
+ ### 模块组成
26
+
27
+ 每个模块由以下文件组成:
28
+
29
+ | 文件类型 | 文件名 | 作用 |
30
+ |----------|--------|------|
31
+ | **配置文件** | `*.json` | 声明式定义模块的配置参数、元数据 |
32
+ | **逻辑文件** | `index.js` | 实现模块的业务逻辑和功能 |
33
+
34
+ ### 设计优势
35
+
36
+ **1. 声明式配置**
37
+ - JSON 文件用于声明式定义模块的元数据和配置项
38
+ - 无需编写代码即可完成模块注册和参数配置
39
+ - 便于通过可视化工具进行管理和配置
40
+
41
+ **2. 逻辑与配置解耦**
42
+ - 配置变化无需修改代码,降低维护成本
43
+ - 相同的业务逻辑可以通过不同配置复用
44
+ - 配置文件可以独立版本管理和部署
45
+
46
+ **3. 自动化能力**
47
+ - 框架可自动扫描 JSON 配置完成模块注册
48
+ - 自动生成文档和配置表单
49
+ - 自动进行参数验证,减少重复代码
50
+
51
+ **4. 热更新支持**
52
+ - 配置文件可热更新,无需重启服务
53
+ - 支持动态添加/修改模块配置
54
+
55
+ **5. 团队协作优化**
56
+ - 配置人员和开发人员可并行工作
57
+ - 非开发人员也能参与模块配置
58
+ - 统一的配置格式降低沟通成本
59
+
60
+ ### 模块类型
61
+
62
+ **core 核心模块**:框架基础模块,包括应用(app)、控制器(controller)、模型(model)、逻辑(logic)、插件(plugin)、服务(service)、视图(view)、中间件(middleware)等。
63
+
64
+ **com 公共组件**:可复用的公共组件,包括数据库(sql)、缓存(cache)、API管理(api)、事件(event)、任务(task)、静态资源(static)、模板(template)、MQTT、Socket等。
65
+
66
+ ## 快速开始
67
+
68
+ ### 安装
69
+
70
+ ```bash
71
+ npm install mm_os
50
72
  ```
51
- 然后根据提示进行配置,配置完成后,输入以下指令进行安装
52
- ``` command
53
- npm i mm_os
73
+
74
+ ### 基本用法
75
+
76
+ ```javascript
77
+ const { MM_os } = require('mm_os');
78
+
79
+ // 设置运行路径
80
+ $.run_path = __dirname;
81
+
82
+ // 创建服务器实例
83
+ const server = new MM_os({
84
+ web: {
85
+ host: '0.0.0.0',
86
+ port: 8000,
87
+ socket: true
88
+ },
89
+ mysql: {
90
+ host: '127.0.0.1',
91
+ port: 3306,
92
+ user: 'root',
93
+ password: '123456',
94
+ database: 'test'
95
+ },
96
+ cache: {
97
+ way: 'memory'
98
+ }
99
+ });
100
+
101
+ // 启动服务器
102
+ async function startServer() {
103
+ await server.init();
104
+ await server.start();
105
+ console.log('服务器启动成功');
106
+ }
107
+
108
+ startServer();
54
109
  ```
55
110
 
56
- #### 使用说明
57
- 安装完成后,目录下新建一个index.js文件,在命令行输入以下代码,然后运行即可
111
+ ## 项目目录结构
112
+
113
+ 基于 MOS 框架开发的项目采用标准化目录结构:
114
+
115
+ ```
116
+ ├── app/ # 应用目录,包含多个独立应用
117
+ │ ├── app_name/ # 应用名称
118
+ │ │ ├── event_api/ # 事件API目录
119
+ │ │ │ ├── web/ # Web路由处理
120
+ │ │ │ │ ├── event.json # 事件配置
121
+ │ │ │ │ └── main.js # 入口文件
122
+ │ │ │ ├── api/ # API接口路由
123
+ │ │ │ ├── client/ # 客户端接口路由
124
+ │ │ │ └── manage/ # 管理后台路由
125
+ │ │ ├── plugin/ # 插件目录
126
+ │ │ │ ├── main/ # 主插件(业务逻辑)
127
+ │ │ │ │ └── api_{app}_{channel}/{api_name}/
128
+ │ │ │ │ ├── api.json # API配置
129
+ │ │ │ │ ├── param.json # 参数验证配置
130
+ │ │ │ │ └── index.js # API实现
131
+ │ │ │ └── server/ # 服务端插件(数据管理)
132
+ │ │ ├── pendant/ # 挂件组件目录
133
+ │ │ ├── static/ # 静态资源目录
134
+ │ │ ├── app.json # 应用配置
135
+ │ │ └── index.js # 应用入口
136
+ ├── cache/ # 缓存配置目录
137
+ ├── com/ # 公共组件目录
138
+ ├── config/ # 全局配置目录
139
+ │ ├── local.json # 本地配置
140
+ │ ├── development.json # 开发环境配置
141
+ │ └── production.json # 生产环境配置
142
+ ├── db/ # 数据库文件目录(SQLite等)
143
+ ├── static/ # 全局静态资源
144
+ ├── index.js # 项目入口
145
+ └── config.json # 主配置文件
146
+ ```
147
+
148
+ ## 应用开发
149
+
150
+ ### 创建应用
151
+
152
+ 每个应用包含独立的业务逻辑,应用配置文件 `app.json`:
153
+
154
+ ```json
155
+ {
156
+ "name": "user",
157
+ "version": "1.0",
158
+ "title": "用户",
159
+ "description": "用于用户身份验证",
160
+ "author": "developer",
161
+ "scope": "server",
162
+ "main": "./index.js",
163
+ "func_name": "main",
164
+ "sort": 10,
165
+ "state": 1,
166
+ "sql": {
167
+ "way": "mysql",
168
+ "mysql": {
169
+ "host": "127.0.0.1",
170
+ "port": 3306,
171
+ "user": "root",
172
+ "password": "password",
173
+ "database": "example"
174
+ }
175
+ },
176
+ "cache": {
177
+ "way": "redis"
178
+ }
179
+ }
180
+ ```
181
+
182
+ ### 事件路由配置 (event.json)
183
+
184
+ 定义应用的路由规则:
185
+
186
+ ```json
187
+ {
188
+ "/api/user/list": {
189
+ "method": "GET",
190
+ "title": "获取用户列表",
191
+ "auth": false
192
+ },
193
+ "/api/user/create": {
194
+ "method": "POST",
195
+ "title": "创建用户",
196
+ "auth": true
197
+ },
198
+ "/user/*": {
199
+ "method": "ALL",
200
+ "title": "用户页面路由",
201
+ "auth": false
202
+ }
203
+ }
204
+ ```
205
+
206
+ ### 创建 API 接口
207
+
208
+ API 是 MOS 框架的核心组件,每个 API 包含三个文件:
209
+
210
+ #### 1. api.json - API 配置
211
+
212
+ ```json
213
+ {
214
+ "name": "user_sign_in",
215
+ "title": "账户登录",
216
+ "description": "用户登录接口,支持账号密码、手机号验证码、社交账号登录",
217
+ "path": "/api/user/sign_in",
218
+ "type": "api",
219
+ "method": "ALL",
220
+ "cache": 0,
221
+ "param_path": "./param.json",
222
+ "check_param": true,
223
+ "sort": 1
224
+ }
225
+ ```
226
+
227
+ **api.json 字段说明:**
228
+
229
+ | 字段 | 类型 | 必填 | 说明 |
230
+ |------|------|------|------|
231
+ | name | string | 是 | API 唯一标识 |
232
+ | title | string | 是 | API 显示名称 |
233
+ | description | string | 否 | API 描述说明 |
234
+ | path | string | 是 | 访问路径 |
235
+ | type | string | 是 | 类型,固定为 "api" |
236
+ | method | string | 是 | 请求方法:GET、POST、ALL |
237
+ | cache | number | 否 | 缓存时间(秒),0 表示不缓存 |
238
+ | param_path | string | 否 | 参数验证配置文件路径 |
239
+ | check_param | boolean | 否 | 是否校验参数 |
240
+ | sort | number | 否 | 排序序号 |
241
+
242
+ #### 2. param.json - 参数验证配置
243
+
244
+ ```json
245
+ {
246
+ "title": "用户登录验证模型",
247
+ "name": "user_sign_in",
248
+ "filter": true,
249
+ "get": {
250
+ "query": ["account", "password", "code"],
251
+ "query_required": ["account"]
252
+ },
253
+ "post": {
254
+ "body": ["account", "password", "code", "phone"],
255
+ "body_required": ["account"]
256
+ },
257
+ "list": [
258
+ {
259
+ "name": "account",
260
+ "title": "账号",
261
+ "type": "string",
262
+ "string": {
263
+ "min": 5,
264
+ "max": 16,
265
+ "format": "username"
266
+ }
267
+ },
268
+ {
269
+ "name": "password",
270
+ "title": "密码",
271
+ "type": "string",
272
+ "string": {
273
+ "min": 32,
274
+ "max": 32,
275
+ "format": "password"
276
+ }
277
+ },
278
+ {
279
+ "name": "phone",
280
+ "title": "手机号码",
281
+ "type": "string",
282
+ "string": {
283
+ "format": "phone",
284
+ "range": [11, 11]
285
+ }
286
+ },
287
+ {
288
+ "name": "code",
289
+ "title": "短信验证码",
290
+ "type": "string"
291
+ }
292
+ ]
293
+ }
294
+ ```
295
+
296
+ **param.json 字段说明:**
297
+
298
+ | 字段 | 类型 | 说明 |
299
+ |------|------|------|
300
+ | title | string | 验证模型名称 |
301
+ | name | string | 模型标识 |
302
+ | filter | boolean | 是否启用过滤 |
303
+ | get.query | array | GET 请求接受的查询参数 |
304
+ | get.query_required | array | GET 请求必填参数 |
305
+ | post.body | array | POST 请求接受的 body 参数 |
306
+ | post.body_required | array | POST 请求必填参数 |
307
+ | list | array | 参数验证规则列表 |
308
+
309
+ **参数类型支持:**
310
+ - `string`:字符串类型,支持 format(phone、email、username、password)、min、max、range
311
+ - `number`:数字类型,支持 min、max、range
312
+ - `boolean`:布尔类型
313
+ - `array`:数组类型
314
+ - `object`:对象类型
315
+
316
+ #### 3. index.js - API 实现
317
+
58
318
  ```javascript
59
- require("mm_expand");
60
- const OS = require("mm_os");
61
- $.runPath = __dirname + $.slash;
62
- var os = new OS(config);
63
- os.run();
319
+ /**
320
+ * 账户登录接口
321
+ * @param {Object} ctx HTTP上下文
322
+ * @param {Object} db 数据管理器
323
+ * @return {Object} 执行结果
324
+ */
325
+ async function main(ctx, db) {
326
+ // 获取请求参数
327
+ var params = ctx.method === "POST" ? ctx.request.body : ctx.request.query;
328
+
329
+ // 验证参数
330
+ var account = params['account'];
331
+ var password = params['password'];
332
+
333
+ if (!account) {
334
+ return { code: 30001, message: '账号不能为空' };
335
+ }
336
+ if (!password) {
337
+ return { code: 30002, message: '密码不能为空' };
338
+ }
339
+
340
+ // 查询用户
341
+ db.table = "user_account";
342
+ db.key = "user_id";
343
+ var users = await db.get({ username: account });
344
+
345
+ if (users.length === 0) {
346
+ return { code: 60001, message: '用户不存在' };
347
+ }
348
+
349
+ var user = users[0];
350
+
351
+ // 验证密码
352
+ var pass = (password + user.salt).md5();
353
+ if (pass !== user.password) {
354
+ return { code: 30003, message: '密码错误' };
355
+ }
356
+
357
+ // 设置登录状态
358
+ ctx.session.user = user;
359
+
360
+ // 返回结果
361
+ return {
362
+ code: 200,
363
+ message: '登录成功',
364
+ data: {
365
+ user_id: user.user_id,
366
+ username: user.username,
367
+ nickname: user.nickname
368
+ }
369
+ };
370
+ }
371
+
372
+ exports.main = main;
64
373
  ```
65
374
 
66
- #### 二次开发资源
67
- - [二次开发快速入门指南](./doc/二次开发快速入门指南.md) - 从环境搭建到功能扩展的完整流程
68
- - [API参考文档](./doc/API参考文档.md) - 所有核心模块的详细API说明
69
- - [示例代码](./examples/) - 实用的代码示例,包括:
70
- - 最小化应用示例
71
- - 数据库操作示例
72
- - 路由和中间件示例
73
- - 插件开发示例
74
-
75
- #### 特色说明
76
- 1. 独特的json配置文件 + js脚本的开发模式,让开发更加灵活,更加高效。
77
- 2. 内置http请求模块、mysql、redis、mongodb模块,让请求数据和操作数据库更加简单。
78
- 3. 适合分布式部署,支持多进程,支持负载均衡,支持集群部署。
79
- 4. 适合微服务架构,支持服务注册与发现,支持服务调用,支持服务熔断,支持服务降级。
80
- 5. mm(热拔插)插件机制,可以快速扩展功能,并且支持热拔插,无需重启服务。
81
- 6. jwt鉴权,支持单点登录,支持多用户登录,支持多角色权限控制。
82
- 7. mysql数据库,支持多数据库连接,支持事务,支持分库分表。
83
- 8. redis缓存,支持多缓存连接,支持缓存穿透,支持缓存雪崩。
84
- 9. art-template模板引擎,支持多模板引擎,支持模板继承,支持模板缓存。
85
- 10. 支持多语言,采用I18n多语言模式。
86
- 11. 支持多协议,支持http,支持https,支持websocket,支持grpc。
87
- 12. 支持多平台,支持windows,支持linux,支持mac。
88
-
89
- #### 参与贡献
90
- 1. qiuwenwu(mm_os框架创始人)
91
- 2. 自由人网络(mm_os框架核心开发团队)
92
-
93
- #### 特点
94
- 1. 简单易用,快速上手
95
- 2. 高效开发,快速迭代
96
- 3. 灵活扩展,快速定制
97
- 4. 稳定可靠,长期维护
98
- 5. 开源免费,社区支持
99
- 6. 适合个人开发者,适合企业级应用
100
- 8. 适合初创企业,中小型企业,仅需几人即可快速搭建大型网站、游戏服务端或智能物联网(AIOT)平台
101
-
102
- #### 附言
103
- 1. mm_os 官方网站 [www.fman.top](https://www.fman.top)
104
- 2. 你可以访问 [https://www.fman.top/source/market](https://www.fman.top/source/market) 来了解 mm_os 上的优秀开源项目
105
- 3. [mm_os_server](https://www.fman.top/download) 是极为有价值开源项目,是综合评定出的优秀开源项目,具有丰富的插件、模板、挂件可用
375
+ ### 事件处理入口 (main.js)
376
+
377
+ ```javascript
378
+ // 使用API管理器
379
+ var api = $.admin.api('user_web', '网站-用户管理');
380
+ api.call('update');
381
+
382
+ /**
383
+ * @description 接口主函数
384
+ * @param {Object} ctx HTTP上下文
385
+ * @param {Object} db 数据管理器
386
+ * @return {Object} 执行结果
387
+ */
388
+ async function main(ctx, db) {
389
+ // 设置数据库连接
390
+ $.push(db, $.admin.sql('sys').db(), true);
391
+
392
+ // 使用模板引擎
393
+ db.tpl = new $.Tpl();
394
+ var bag = db.tpl.viewBag;
395
+ bag.path = ctx.path;
396
+ bag.query = ctx.query;
397
+
398
+ // 执行API路由
399
+ return await api.run(ctx, db);
400
+ }
401
+
402
+ exports.main = main;
403
+ ```
404
+
405
+ ## 配置说明
406
+
407
+ MOS 支持多种配置选项,包括:
408
+
409
+ - **web**:Web 服务器配置
410
+ - **mysql**:MySQL 数据库配置
411
+ - **sqlite**:SQLite 数据库配置
412
+ - **cache**:缓存配置(`way` 字段指定缓存方式:`memory`、`redis`、`mongodb`)
413
+ - **redis**:Redis 缓存配置
414
+ - **mongodb**:MongoDB 配置
415
+ - **mqtt**:MQTT 服务器配置
416
+ - **socket**:Socket 服务器配置
417
+
418
+ ### 配置文件示例
419
+
420
+ ```json
421
+ {
422
+ "name": "mos",
423
+ "title": "服务端系统",
424
+ "log": {
425
+ "level": "debug",
426
+ "file": true
427
+ },
428
+ "web": {
429
+ "state": true,
430
+ "host": "0.0.0.0",
431
+ "port": 8000,
432
+ "socket": false,
433
+ "cos": {
434
+ "status": true,
435
+ "origin": "*"
436
+ },
437
+ "static": {
438
+ "state": 1,
439
+ "root": "./static"
440
+ }
441
+ },
442
+ "mysql": {
443
+ "host": "127.0.0.1",
444
+ "port": 3306,
445
+ "user": "root",
446
+ "password": "password",
447
+ "database": "example"
448
+ },
449
+ "cache": {
450
+ "way": "redis"
451
+ },
452
+ "redis": {
453
+ "host": "localhost",
454
+ "port": 6379,
455
+ "password": "",
456
+ "database": 0
457
+ }
458
+ }
459
+ ```
460
+
461
+ ## 全局对象
462
+
463
+ MOS 提供了丰富的全局对象供开发使用:
464
+
465
+ ### `$` 对象
466
+
467
+ | 属性 | 说明 |
468
+ |------|------|
469
+ | `$.sql` | 数据库操作对象 |
470
+ | `$.cache` | 缓存操作对象 |
471
+ | `$.log` | 日志对象 |
472
+ | `$.admin` | 管理员对象 |
473
+ | `$.eventer` | 事件总线 |
474
+ | `$.config` | 配置管理器 |
475
+ | `$.Tpl` | 模板引擎类 |
476
+ | `$.ret` | 返回结果工具 |
477
+ | `$.run_path` | 当前运行路径 |
478
+
479
+ ### `$.ret` 返回工具
480
+
481
+ ```javascript
482
+ // 成功返回
483
+ return $.ret.body(data); // { code: 200, message: 'success', data: data }
484
+
485
+ // 错误返回
486
+ return $.ret.error(code, message); // { code: code, message: message }
487
+ ```
488
+
489
+ ## 开发指南
490
+
491
+ 1. **安装依赖**:`npm install`
492
+ 2. **开发调试**:`npm run dev`
493
+ 3. **运行测试**:`npm run test`
494
+
495
+ ## 许可证
496
+
497
+ ISC