源码

application/json 与 application/x-www-form-urlencoded的比较

左心房为你撑大大i 提交于 2019-12-04 15:12:18
application/json 与 application/x-www-form-urlencoded的比较 application/x-www-form-urlencoded 提交请求示例 curl -X POST 'http://localhost:8080/formPost' -d 'id=1&name=foo&mobile=13612345678' wireshark抓包结果 对应的服务端解析参数源码 //org.springframework.web.method.annotation.RequestParamMethodArgumentResolver #resolveName if ( arg == null ) { String[] paramValues = webRequest.getParameterValues(name); if (paramValues != null ) { arg = paramValues. length == 1 ? paramValues[ 0 ] : paramValues; } } application/json 提交请求示例 curl -X POST -H "Content-Type: application/json" 'http://localhost:8080/jsonPost' -d '{" id ":2,"

workerman源码解读02

徘徊边缘 提交于 2019-12-04 15:12:05
原理 Worker说明 Worker是WorkerMan中最基本容器,Worker可以开启多个进程监听端口并使用特定协议通讯,类似nginx监听某个端口。每个Worker进程独立运作,采用Epoll(需要装event扩展)+非阻塞IO,每个Worker进程都能上万的客户端连接,并处理这些连接上发来的数据。主进程为了保持稳定性,只负责监控子进程,不负责接收数据也不做任何业务逻辑。 客户端与worker进程的关系 主进程与worker子进程关系 特点: 从图上我们可以看出每个Worker维持着各自的客户端连接,能够方便的实现客户端与服务端的实时通讯,基于这种模型我们可以方便实现一些基本的开发需求,例如HTTP服务器、Rpc服务器、一些智能硬件实时上报数据、服务端推送数据、游戏服务器、微信小程序后台等等。 来源: https://www.cnblogs.com/songdongdong6/p/11870829.html

Nop 源码分析 十三 插件

泄露秘密 提交于 2019-12-04 15:06:10
前面分析太细了。。回到WidgetController的WidgetsByZone方法,大体意思是: 获得并缓存名称为 string widgetZone 的 List<RenderWidgetModel>() 。 其中RenderWidgetModel记录的路由信息通过插件的GetDisplayWidgetRoute方法获得 如下: /// <summary> /// Gets a route for displaying widget /// </summary> /// <param name="widgetZone">Widget zone where it's displayed</param> /// <param name="actionName">Action name</param> /// <param name="controllerName">Controller name</param> /// <param name="routeValues">Route values</param> public void GetDisplayWidgetRoute(string widgetZone, out string actionName, out string controllerName, out RouteValueDictionary

NOP源码分析十二

血红的双手。 提交于 2019-12-04 15:06:08
接上一节 /// <summary> /// Perform file deply /// </summary> /// <param name="plug">Plugin file info</param> /// <returns>Assembly</returns> private static Assembly PerformFileDeploy(FileInfo plug) { if (plug.Directory.Parent == null) throw new InvalidOperationException("The plugin directory for the " + plug.Name + " file exists in a folder outside of the allowed nopCommerce folder heirarchy"); FileInfo shadowCopiedPlug; if (CommonHelper.GetTrustLevel() != AspNetHostingPermissionLevel.Unrestricted) { //all plugins will need to be copied to ~/Plugins/bin/ //this is aboslutely required because all

workerman源码解读01

最后都变了- 提交于 2019-12-04 15:05:57
序言 Workerman,高性能socket服务框架 Workerman是什么? Workerman是一款纯PHP开发的开源高性能的PHP socket 服务框架。 Workerman不是重复造轮子,它不是一个MVC框架,而是一个更底层更通用的socket服务框架,你可以用它开发tcp代理、梯子代理、做游戏服务器、邮件服务器、ftp服务器、甚至开发一个php版本的redis、php版本的数据库、php版本的nginx、php版本的php-fpm等等。Workerman可以说是PHP领域的一次创新,让开发者彻底摆脱了PHP只能做WEB的束缚。 实际上Workerman类似一个PHP版本的nginx,核心也是多进程+Epoll+非阻塞IO。Workerman每个进程能维持上万并发连接。由于本身常住内存,不依赖Apache、nginx、php-fpm这些容器,拥有超高的性能。同时支持TCP、UDP、UNIXSOCKET,支持长连接,支持Websocket、HTTP、WSS、HTTPS等通讯协以及各种自定义协议。拥有定时器、异步socket客户端、异步Mysql、异步Redis、异步Http、异步消息队列等众多高性能组件。 Workerman的一些应用方向 Workerman不同于传统MVC框架,Workerman不仅可以用于Web开发,同时还有更广阔的应用领域,例如即时通讯类、物联网

NOP源码分析 一

我是研究僧i 提交于 2019-12-04 15:05:42
新建Nop.Web项目(framework4.51),解决方案:NopCommerce.解决方案下创建解决方案文件夹:Presentation,拖拽Nop.Web到里面。 源项目Global.asax.cs注册路由的代码: public static void RegisterRoutes(RouteCollection routes) { routes.IgnoreRoute("favicon.ico"); routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); //register custom routes (plugins, etc) var routePublisher = EngineContext.Current.Resolve<IRoutePublisher>(); routePublisher.RegisterRoutes(routes); routes.MapRoute( "Default", // Route name "{controller}/{action}/{id}", // URL with parameters new { controller = "Home", action = "Index", id = UrlParameter.Optional }, new[] { "Nop.Web

NOP源码分析七---继续

本秂侑毒 提交于 2019-12-04 15:05:36
上次我们研究到LocalizationSettings,但在依赖注入里没有搜索到注册类。后来才发现,原来所有的继承自ISetting的类 都是通过如下注册的: builder.RegisterSource(new SettingsSource()); 此方法的声明如下: // // 摘要: // Add a registration source to the container. // // 参数: // builder: // The builder to register the registration source via. // // registrationSource: // The registration source to add. public static void RegisterSource(this ContainerBuilder builder, IRegistrationSource registrationSource); 从声明可以看出 这是一个ContainerBuilder 的扩展方法,添加一个注册源到容器,而注册源就是IRegistrationSource ,IRegistrationSource 接口的声明如下: namespace Autofac.Core { // 摘要: 当请求未注册的服务时,允许在运行时注册(懒惰注册

NOP源码分析 二 周二

天大地大妈咪最大 提交于 2019-12-04 15:05:36
昨天研究到: builder.RegisterInstance(config).As<NopConfig>().SingleInstance(); builder.RegisterInstance(this).As<IEngine>().SingleInstance(); builder.RegisterInstance(typeFinder).As<ITypeFinder>().SingleInstance(); builder.Update(container); 注册NopConfig、NopEngine/WebAppTypeFinder -------------------------------------------接着往下------------------------------------------------- var drTypes = typeFinder.FindClassesOfType<IDependencyRegistrar>(); 这一句根据类名可知道,是根据给定类型(接口),获得类 就是获得IDependencyRegistrar类,其实就是一个依赖注入类。通过多态,最终调用的代码:return FindClassesOfType(assignTypeFrom, GetAssemblies (), onlyConcreteClasses);

NOP源码分析五,文件位置等详细内容,感冒真难受,嗓子痒又疼。。

非 Y 不嫁゛ 提交于 2019-12-04 15:05:34
前面我们知道,依赖注入是通过实现IDependencyRegistrar接口的Register方法实现的。而NOP的依赖类是在Nop.Web.Framework下的DependencyRegistrar类,里面注册了好多类,就不黏贴了。我们再回头看一下上节介绍的任务计划。里面有个 IScheduleTaskService 类 查找其实现类,代码如下: namespace Nop.Services.Tasks { /// <summary> /// Task service /// </summary> public partial class ScheduleTaskService : IScheduleTaskService { #region Fields private readonly IRepository<ScheduleTask> _taskRepository; #endregion #region Ctor public ScheduleTaskService(IRepository<ScheduleTask> taskRepository) { this._taskRepository = taskRepository; } #endregion #region Methods /// <summary> /// Deletes a task /// <

Nop 源码分析四 任务系统

大兔子大兔子 提交于 2019-12-04 15:05:34
分析TaskManager.Instance.Initialize(); 下面是一个实体抽象父类,ScheduleTask 继承此类。 namespace Nop.Core { /// <summary> /// Base class for entities /// </summary> public abstract partial class BaseEntity { /// <summary> /// Gets or sets the entity identifier /// </summary> public int Id { get; set; } public override bool Equals(object obj) { return Equals(obj as BaseEntity); } private static bool IsTransient(BaseEntity obj) {//default返回类型默认值,int是0,string是null等 return obj != null && Equals(obj.Id, default(int)); } private Type GetUnproxiedType() { return GetType(); } public virtual bool Equals(BaseEntity other)