文档库 最新最全的文档下载
当前位置:文档库 › XFS服务源代码级深入解析20066794142532

XFS服务源代码级深入解析20066794142532

XFS服务源代码级深入解析20066794142532
XFS服务源代码级深入解析20066794142532

“Diebold XFS服务”源代码级深入解析

这篇文章的目的是记录一下我分析“Diebold XFS服务”软件是怎样实现的过程。当然,我是没有Diebold软件的源代码的,也没看过一句我所分析内容涉及到的代码,其源代码只在国外才有,我手中只有执行程序,不过,一个软件有没有源代码对于我来说是无关紧要的,面对着计算机这个东西,我只看到代表0和1的高低电平在机器里面跳跃着,在总线、硬盘、内存之间不停的忙碌着,其实它们与人类的世界并没有什么分别。

如果你对Diebold XFS服务是怎样实现的感兴趣的话,可以看看,不过估计能够基本看懂这篇文章的人极少。因为本来熟悉ATM平台软件编写的人就少,再者熟悉Diebold软件的人也少,而这两者都熟悉的人在中国不会再找到了。不过,如果你有足够的技术基础和ATM行业知识的话,这篇文章应该对你会有些帮助的。

你要是接触过Diebold的机器,那么对于我在下文中提到的东西应该非常熟悉了,虽然你从来没有去想过在“Diebold XFS服务”背后,它都做了些什么工作。

(本文假设大家对ATM的相关标准都比较熟悉,不专门解释文中出现的每个术语)

我这次是分析基于Windows平台下面的符合CEN/XFS标准2.0版(其实3.0基本不变)的Diebold软件,不管以前在OS/2下面常用的TCS 912等系统。下面提到的底层都指Windows平台的底层,一般被迪堡称为Agilis Power平台。

因为Diebold在Windows平台下面的软件都是符合WOSA/XFS标准的,所以分为两个大部分,一个属于XFS Manager上面的一层,对应的业界标准一般是ActiveXFS规范,另外一个属于XFS Manager下面的一层,俗称SP,对应业界的WOSA/XFS规范。

“Diebold XFS服务”是XFS Manager上面的一层,但是它却跟其他上层模块没有太大关系。

如果接触过Diebold软件的人都知道,Diebold机器上要想运行ATM软件,首先是启动一个Windows系统服务,叫做Diebold XFS。启动的方式就是打开在“控制面板”里面的“服务”,找到叫做Diebold XFS的一项服务,然后鼠标点击“启动”即可。正常生产上运行的机器,这项服务都被设置为“自动启动”,只要操作系统一起来,服务就会启动了。

Diebold XFS是整个Diebold的程序入口处,是第一个启动的主要程序,由它来启动其他的东西,包括初始化硬件等工作。其实Diebold XFS只是“服务”中的一个名字,对应的程序是“C:\Diebold\xfs\bin\SPIService.exe”,启动了Diebold XFS仅仅是将SPIService.exe执行起来了。

既然SPIService.exe这么重要,我们先从它看起。SPIService.exe依赖几个非操作系统自带的文件分别是“C:\Diebold\XFS\bin\dboldspi.dll”、

“C:\Diebold\XFS\bin\dztracr0.dll”,“C:\windows\system32\XFS_Conf.dll”。

其中XFS_Conf.dll没什么可说的,是XFS Manager自己的三个DLL之一,主要是用来访问注册表的,包括WFMOpenKey等函数,在这里主要是SPIService.exe要访问注册表中的有关SP配置的项,所以用到了XFS_Conf.dll。

dboldspi.dll是非常重要的dll,它就是导出SPI接口的SP程序,该dll导出了WOSA/XFS规范规定的WFPOpen、WFPClose等SPI。但是除了导出SPI 之外,dboldspi.dll还导出了其他Diebold自用的接口,对于SPIService.exe来说,只用了dboldspi.dll的3个接口,分别是StartSPIDevice、StopSPIDevice、AreSPIInitialized。看这三个函数的名字就知道它们是干什么的了,StartSPIDevice 是启动SP的,StopSPIDevice是停掉SP的,AreSPIInitialized是判断SP是否已经被启动了。

dztracr0.dll是用来记录日志的。整个迪堡的底层都是用这个dll来实现记录日志的。Diebold的平台还配置了一个工具叫做DzTrace.exe,它是用来配置各个SP模块记录的日志级别、是否把日志记录到硬盘等内容,相当于一个日志配置工具。DzTrace.exe还属于一个日志查看显示工具,因为如果没有将日志配置为记录到硬盘的时候,SP的日志都不会保存,但是在SP运行的时候,你打开DzTrace.exe,它有个文本框(DzTrace.exe就是个MFC向导建的单文档视图程序)会实时显示SP的日志内容。

dztracr0.dll导出了大概10几个API,其中比较常用的是OpenTrace、GetTraceLevel、SendTraceMsg和SendErrorMsg,SPIService.exe也就用到了这4个函数。SPIService.exe调用SendTraceMsg和SendErrorMsg时只要把日志内容传给该函数就可以了,至于记录日志的事情都是dztracr0.dll自己完成。

好了,到现在为止我们已经看了SPIService.exe所涉及到的几个dll及其相应的作用,下面开始看看整个程序是怎样运转起来的。

因为SPIService.exe是一个Windows“服务”,所以它的启动是通过系统服务控制器来实现的。我们需要熟悉“服务”是怎样调用起来的才能理解SPIService.exe。在Windows的“服务”中针对每个服务都有“启动”、“停止”、“暂停”、“恢复”几个按钮。当你选中Diebold XFS那项服务,然后按“启动”时,实际上是操作系统调用了“SPIService.exe / Install”,相应的“停止”就是“SPIService.exe / UnInstall”。所以SPIService.exe运转是这样的:点击Diebold XFS服务的“启动”按钮,Windows进行一系列处理,最终将SPIService.exe装载起来,并且以参数Install调用。

接着看看SPIService.exe里面的程序。SPIService.exe的程序入口就是个命令行解析处理,如果发现操作系统启动服务时传入的命令行字符是“Install”,就走一个分支;如果是“UnInstall”就走另外一个分支。

当传入“Install”时,表示有人要启动Diebold XFS服务了。SPIService.exe 首先将传入的字符串与“Install”比较,如果相同则继续。接着

SPIService.exe以字符串“XFSService”为参数调用了dztracr0.dll的OpenTrace 函数,可见整个SPIService.exe的日志应该记录到对应于“XFSService”的那个日志文件了。

日志启动完成后,程序接着调用StartServiceCtrlDispatcher函数,传入参数包含要操作的服务名字:“dbdxfs”(Diebold XFS的实际名字是dbdxfs,Diebold XFS 只是显示名字而已),要求连接到操作系统的service control manager,如果连接失败,调用SendErrorMsg记录“Unable to StartServiceCtrlDispatcher”,整个程序直接返回。如果打开成功,记录“Register Service for …...”,接着调用OpenSCManager打开服务控制的数据库,失败则记录“Unable to OpenSCManager”。接着调用CreateService函数将dbdxfs服务启动起来,如果调用失败,则记录日志,调用CloseServiceHandle关闭刚才打开的句柄。

上面是一个标准的Windows下面的服务启动过程,当传入“UnInstall”参数其处理也差不多,只是最后要调用DeleteService把自己从系统服务中删除,而上面是CreateService把自己创造出来。

服务起来后,记录日志“Starting Service”,接着调用RegisterServiceCtrlHandler将服务的处理函数注册进去,以后针对Diebold XFS 的调用都转到该被注册的函数中去处理。接着调用SetServiceStatus函数,在服务控制管理器里面将数据库的状态更新了下,表示与操作系统服务打交道的这块已经准备完毕了。

到这里,SPIService.exe本身的处理已经差不多了,它接着就开始调用dboldspi.dll导出的AreSPIInitialized函数,看看是否SP已经被起来过,如果已经起来了,调用SetServiceStatus函数更新下,然后就直接返回。

如果是第一次起程序,继续向下。先记录“Before AreSPIInitialized”,接着记录“Waiting for device to initialize…..”,然后调用SetServiceStatus函数更新下,接着调用了Sleep函数将主线程挂起来一段时间。

接着记录“SPIServiceInitialization”,直接调用WOSA的函数WFMOpenKey打开注册表的

HKEY_LOCAL_MACHINE\SOFTWARE\Diebold\Diebold XFS SPIs键,该键

里面有一项叫做“installGDriver”,如果发现其不为0,则找到另外一项“path”,这里面是GDriver相关的文件目录,一般path这一项里面的内容是

“C:\Diebold”,接着调用strcat将该路径与字符串

“XFS\AxiohmPrinter\GDriverInst.cmd”合并,最后的结果是“C:\Diebold

\XFS\AxiohmPrinter\GDriverInst.cmd”,然后就直接调用fopen打开文件了,其参数就是刚组合好的GDriverInst.cmd 文件。我看了一下这个cmd文件,内容如下:

@echo off

call c:\diebold\xfs\bin\prtsetup.exe -v -i -p THRML1 -n "Axiohm 2002" -d "Axiohm 2002" -f rasdd.dll -e 2002.dll -c rasddui.dll -b rasddui.hlp -o

c:\diebold\xfs\log\thermallog.txt

实际上是安装一个热敏打印机的驱动程序。看来这个设备很重要,以至于在程序里面专门处理一下。

该cmd文件调用完后,接着调用WFMSetValue将“installGDriver”的值置为0。

这样看来,只会安装这个驱动一次。

接着,又看看注册表里面的

HKEY_LOCAL_MACHINE\SOFTWARE\Diebold下面有没有“start_css”这个配置,如果有,接着调用InitializeSecurityDescriptor初始化一个新的安全描述符,接着SetSecurityDescriptorDacl一下,然后CreatePipe建了个管道。

下面就看“css_path”配置的路径是什么,然后直接调用CreateProcess 新建了个进程,该进程执行css_path路径下面的“css.exe /AE /IN /TR”程序。Css.exe是Diebold用来网络通讯用的通讯子模块。

上面提到的一堆东西,都不是关键部分,下面该关键部分出场了。因为是WOSA/XFS2.0的程序,所以有关SP的配置是在

HKEY_CLASSES_ROOT\WOSA/XFS_ROOT 下面,这个熟悉WOSA/XFS的人都知道的。

首先直接调用WOSA的函数WFMOpenKey打开注册表的

LOGICAL_SERVICES键,接着对该键下面的所有子键使用WFMEnumKey 函数进行枚举,找到每个子键的项Provider,然后根据Provider的值找到对应的SERVICE_PROVIDERS所在的子键,然后看这些子键的项是否有一项叫做“autostart”的,如果该项被配置为“1”,表示需要自动重启,则会调用dboldspi.StartSPIDevice,将该SP启动起来。此时各个硬件设备开始做初始化动作,如果熟悉Diebold机器的人都会知道,当“Diebold XFS服务”被启动时,等几秒钟ATM机器的读卡器、出钞机芯、流水等会做动作,就是在这个时候开始的,因为“Diebold XFS服务”会调用每个被配置为autostart的设备SP的导出函数StartSPIDevice,从而硬件设备会做初始化动作。

提到autostart,熟悉的人都会想起,Diebold提供的一个工具叫做“XFS Configuration Editor”,里面打开后一般要求把机器上要使用的设备设为autostart,其他不用的设备设为not autostart,其作用就是在这里提供给“Diebold XFS服务”用的。

到了这里整个“Diebold XFS服务”要做的工作都已经基本完成,剩下的一件事就是启动CSS的日志记录功能,让其单独去记录日志去。

好了,“Diebold XFS服务”已经启动完毕,在Windows的服务列表中,也显示服务状态变为“已启动”。

memcacheQ 配置

memcacheQ 配置 什么是memcacheQ ? memcacheQ是一个基于memcache协议、BDB持久数据存储、高性能轻量级队列服务程序。 特点是: 1.简单高效,基于memcache协议,这意味着只要客户端支持memcache协议即可使用。 2.队列数据存储于BDB,持久保存。 3.并发性能好。 4.支持多条队列。 并发量较的web环境,特别是数据库写入操作过多的情景,使用队列可大大缓解因并发问题造成的数据库锁死问题。生产环境中使用效果非常好。 先决条件: memcacheQ依赖于libevent,libevent-devel和BDB (BerkleyDB) 1.先检查libevent, libevent-devel是否已经安装: rpm -qa|grep libevent 输出中必须包含libevent, libevent-deve, 如果缺失,使用以下命令安装: yum install libevent yum install libevent-devel 安装完毕再复查之:rpm -qa|grep libevent, 确保安装正确。 注意事项:libevent, libevent-devel优先使用yum安装源,光盘镜像中的rpm包安装,这样稳定性和兼容性可得到保证,网上流传的使用源码安装libevent的方法会有问题,因为很可能系统已经安装libevent, 再使用源码安装,必然导致冲突,造成意外问题,所以一定要使用上述命令检查系统是否已经安装相应的库。 2.安装BerkleyDB cd /usr/local/src wget http://219.239.89.57/deploy/db-5.2.28.tar.gz tar zxvf db-5.2.28.tar.gz cd db-5.2.28 cd build_unix ../dist/configure make make install 3.准备安装memcacheQ cd /usr/local/src wget http://219.239.89.57/deploy/memcacheq-0.2.0.tar.gz tar zxvf memcacheq-0.2.0.tar.gz cd memcacheq-0.2.0 修改configure文件,找到bdbdir="/usr/local/BerkeleyDB.4.7",修改为 bdbdir="/usr/local/BerkeleyDB.5.2", 否则执行configure时会产生找不到BDB的错误。

顺丰物流之“嘿客”业务分析

毕业设计 题目:顺丰物流之“嘿客”业务分析系部(院):信息物流系 专业: 学号: 姓名: 指导教师:

“嘿客”是一个资源整合的平台,在O2O实践中其作用将更加明显。既要整合顺丰内部的资源,也要逐步对外放开资源,在这一过程中,电商和快递业务是全部业务的基础,必须把“嘿客”作为电商商品展示、购买、体验、包裹收发等基本功能做扎实,让其承担足够的业务,增加店面对顺丰优选产品的推广,针对“嘿客”收发的包裹给予一定的优惠,以提升用户黏性。 O2O有不同的模式,其产业链涉及线上和线下。顺丰嘿客是O2O模式的一种,为虚拟便利店。文章在实地考察顺丰嘿客经营现状的基础上,分析了其目前经营不佳的原因,从经营管理和消费者心理等方面,为尚处于发展阶段的顺丰嘿客提出改进措施。 关键词:O2O模式顺丰嘿客虚拟便利店 \

一、引言 (4) 二、顺丰“嘿客”的简介 (4) 三、顺风“嘿客”店体系及具体业务操作流程 (6) (一)六大服务体系 (6) (二)具体业务操作流程 (6) 四、顺丰“嘿客”的市场定位与SWAT分析 (7) (一)市场定位 (7) (二)SWOT分析 (7) 五、需要解决的问题及方法 (10) (一)从O2O角度来看存在的问题 (10) (二)从顾客消费体验方面来看存在的问题 (11) (三)解决的方法 (11) 六、结论 (12) 参考文献 (13)

一、引言 无论是解决最后一公里还是打通最后100米,取得了020的线下入口,都不意味着最后的胜利。顺丰铺好了这条叫嘿客的路,究竟会有多少人踏上去,能多大程度上改变网购人群的消费习惯,又能发掘多少非网购群体,都将决定着顺丰的成败,而在020这条被热捧的路上,又吸引着京东、天猫等巨头和资本,但国内尚未有真正成功的案例。 目前,国内零售行业的020模式主要分为三种形式:第一种以天虹商场、银泰为代表,通过微信、微店、电商等多种渠道引导消费的020;第二种为万达的会员化管理模式,把020的运用服务到所有会员,做放大的会员管理;第三种称为反向020,京东、天猫等电商企业向线下实体渠道延伸;而顺丰“嘿客”开业后,其可以称为第四种020模式。 相比其他电商先做线上再扩展物流,需要投入大规模的资金,顺丰依靠本身的物流网络、客户网络比较成熟,而且其服务理念比较好的优势,这种由物流切入零售终端的020模式,显得更加从容。在嘿客店购物体验时,店内主推顺丰优选的优质荔枝,产地直送,但是其他水果均不能送达到,说明生鲜冷链配送尚未真正打通,尚未发挥出顺丰物流链的真正能量。虽然相关配套还有待完善,但嘿客背后所展现出的顺丰“物流链接生活”的大构想已见雏形。 二、顺丰“嘿客”的简介 快递巨头顺丰速运2014年05月18日已正式在全国铺开名为“嘿客”的便利店,首批共518家,从而大举杀入国内火热的O2O(从线上到线下)市场,这一模式将对国内电商格局产生较大影响。 嘿客是顺丰旗下网购服务社区店,通过整合渠道资源,为顾客提供更灵活、更便捷、更智能化的线下社区服务体验。顺丰方面称,网上售卖的商品,很多都需要用户进行实际体验,其中最典型的就是家电、3C、生鲜、服装衣帽等高体验度品类。针对电商无法通过技术手段解决的触觉、味觉和嗅觉,“嘿客”门店提供预售、试穿等服务。商品在店内不设库存,在消费者选择购买后,通过既有的

libevent

libevent源码深度剖析 张亮 Email: sparling.liang@https://www.wendangku.net/doc/af9111429.html,

回想刚开始写时,就冠以“深度剖析”的名称,也是为了给自己一些压力,以期能写好这一系列文章,对libevent源代码的各方面作详细的分析;现在看来也算是达到了最初的目的。希望能给学习和使用libevent的朋友们有所帮助。 Email:sparkling.liang@https://www.wendangku.net/doc/af9111429.html, 张亮

目录 libevent源码深度剖析 (1) 目录 (3) 一序幕 (5) 1 前言 (5) 2 Libevent简介 (5) 3 学习的好处 (5) 二Reactor模式 (6) 1 Reactor的事件处理机制 (6) 2 Reactor模式的优点 (6) 3 Reactor模式框架 (6) 4 Reactor事件处理流程 (8) 5 小结 (9) 三基本使用场景和事件流程 (10) 1 前言 (10) 2 基本应用场景 (10) 3 实例代码 (11) 4 事件处理流程 (11) 5 小结 (12) 四 libevent源代码文件组织 (13) 1 前言 (13) 2 源代码组织结构 (13) 3 小结 (14) 五 libevent的核心:事件event (15) 1 libevent的核心-event (15) 2 libevent对event的管理 (16) 3 事件设置的接口函数 (17) 4 小结 (18) 六初见事件处理框架 (19) 1 事件处理框架-event_base (19) 2 创建和初始化event_base (20) 3 接口函数 (20) 4 小节 (23) 七事件主循环 (24) 1 阶段性的胜利 (24) 2 事件处理主循环 (24) 3 I/O和Timer事件的统一 (27) 4 I/O和Signal事件的统一 (27) 5 小节 (27) 八集成信号处理 (28) 1 集成策略——使用socket pair (28)

Memcached源码剖析笔记

Memcached 源码剖析笔记 Xguru Memcached是一个自由、源码开放、高性能、分布式 内存对象缓存系统,目的在于通过减轻数据库负载来使 动态Web应用程序提速。

目录 1.背景 (3) 2.memcached的安装 (4) 3.memcached的配置 (5) 4.memcached的使用 (6) 4.1.存储命令 (7) 4.2.读取命令 (8) 4.3.删除命令 (8) 4.4.高级命令 (9) 4.5.其他命令 (10) 5.Memcached内部工作机制 (11) 5.1.Memcached基本的数据结构 (11) 5.2.基本设计概念和处理流程 (12) 5.3.内部Hash机制 (15) 5.3.1.Hash函数及冲突解决 (15) 5.3.2.HashTable主要函数 (15) 5.4.slab内存处理机制 (17) 5.4.1.slab主要函数 (17) 5.4.2.slab机制中所采用的LRU算法 (19) 5.5.控制item各种函数 (20) 5.6.守护进程机制 (22) 5.7.Socket处理机制 (23) 1

5.7.1.Unix域协议 (23) 5.7.2.TCP/UDP协议 (24) 5.8.多线程处理机制 (25) 5.9.事件处理机制 (25) 6.未完善之处 (27) 7.参考文献 (28) 2

1.背景 Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提供动态、数据库驱动网站的速度。Memcached基于一个存储键/值对的hashmap。 Memcached是一个自由、源码开放、高性能、分布式内存对象缓存系统,目的在于通过减轻数据库负载来使动态Web应用程序提速。 Memcached是一个在内存中对任意的数据(比如字符串,对象等)所使用的key-value 存储。数据可以来自数据库调用,API调用,或者页面渲染的结果。 Memcached设计理念就是小而强大,它简单的设计促进了快速部署、易于开发,并解决面对大规模的数据缓存的许多难题。所开放的API能用于大部分流行的程序语言 3

顺丰优选营销策略研究

顺丰优选营销策略研究 发表时间:2016-03-24T15:52:46.627Z 来源:《基层建设》2015年24期供稿作者:周华英毛可进 [导读] 浙江中医药大学滨江学院随着电子商务的不断发展,有不少快递企业开始涉足电商行业,希望在广阔的网购市场获取更为理想的利润. 浙江中医药大学滨江学院浙江杭州 310053 摘要:随着电子商务的不断发展,有不少快递企业开始涉足电商行业,希望在广阔的网购市场获取更为理想的利润,一个物流领域与电商行业的跨界经营时代已然到来。本文基于对顺丰速运旗下的顺丰优选的发展情况的了解,对顺丰优选的发展现状进行分析,针对这些,提出一些完善其营销推广策略的建议,使得顺风优选在竞争激烈的市场中更具竞争力,也可以为其他物流企业发展电子商务提供一些参考。 关键词:顺丰优选;电商;营销策略;营销 一、顺丰优选的发展现状 顺丰优选于2012年5月31日正式上线,是顺丰速运旗下的一家以全球优质安全美食为主的网购商城,定位于中高端食品市场。目前,顺丰优选平台大体分为优选商城、优选生鲜、优选海淘以及企业专区(商业人士专业礼品服务等)这四个板块,商品数量超过一万余种,主要覆盖生鲜食品、母婴食品、保健品、粮油食品、酒水饮料、休闲零食、饼干点心、冲调茶饮、美食用具以及产地直采蔬果,另外,也已经开始涉及除美食外的一些产品,如家用电器、手机数码、箱包服饰等。顺丰速运的营业网点覆盖中国大陆31个省、自治区和直辖市,300多个大中城市及1900多个县级市或县区,是实现顺丰优选优质物流服务的强大支持。据了解,自2014年8月11日起,顺丰优选的冷链配送城市从11个拓展到了48个,使得顺丰优选在生鲜食品领域得以更好的发展。2014年5月18日,顺丰速运集团为发展顺丰优选线下能力,实现O2O战略,网购社区服务店“嘿客”正式开业,除青海、西藏外,在全国各省、自治区均有覆盖。遗憾的是,3000多家“嘿客”的发展不尽人意。 二、顺丰优选发展存在的问题 1.营销宣传力度不够,知名度不高。顺丰集团目前仍然是因为其物流业而出名,知晓顺丰优选的受众范围不广,层次不深。除去相关新闻报道以及少量的宣传片,基本上不能够引起消费者高度的关注,也不能很好的了解顺丰优选。前段时间顺丰大力投入的“嘿店”本该是一个不错的宣传手段,深入社区,让消费者进行更多的线下体验,但是没有切实地把握消费者需求,没有起到很好的效果。另外,每逢节假日顺丰必推出某些产品,但是消费者也不能及时地掌握这些信息,没有做到积极地与消费者的互动。 2.市场占有率不高,竞争能力不够理想。顺丰优选在2015年一年度的中国电子商务排行榜上仅仅排到了第二十名,在2014年电商实力排行榜上也没有挤进前十。相比于京东、淘宝,顺丰优选可能确实是在物流方面做得不错,但物流领域和电商领域也确实不同,所以还是需要一定的时间、人力的投入,以及一些基本的大众的业务展示。 3.产品质量保障,食品安全还是需要很大的投入。顺丰优选主要是以食品为主,入口的东西消费者向来是比较谨慎的。而生鲜产品不同于其他产品,它没有标准化,质量控制难度大。顺丰优选需要有更多的行动去注重消费者所关心的食品安全问题。 4.冷链还不够发达。生鲜食品的市场需求非常大,但是生鲜食品在电商交易中所占比例很低,很大的一部分原因是冷链覆盖范围还是有限的,在我国冷链还不发达的大背景下,光靠顺丰的投入怕是有限,也是需要很长时间的建设期。冷链不够发达会直接影响消费者网购生鲜食品的消费习惯,担心生鲜食品在途变质或是配送范围在冷链覆盖范围外。 5.我国网购中高端市场还不成熟。顺丰优选的定位是明确的中高端食品市场,那它的目标客户是有一定消费能力的网购消费者。但是,大部分的网购消费者网购的目的是获得物美价廉的商品,若是以中高端价格去网购大部分消费者会选择实体商店消费。这也是为什么淘宝、蘑菇街等可以迅速发展的原因。 6.跨界经营必要的管理经营改革。虽然说物流业进军电商领域是水到渠成的事,但毕竟是不同的行业,原有的高层在制定战略计划时考虑的会更多更有难度。如何整合企业资源,要发展怎样的一个运营模式,以及培养更为专业的人才都是顺风集团要考虑的问题。 三、顺丰优选的营销策略及建议 与其他同行相比较,顺丰优选虽然可能比较年轻,但从顺丰由物流进军电商、从试水常温高端食品到生鲜、从一线城市扩张到二三线城市、从线上平台到试水线下的“嘿客”这些看来,它在战略部署方面还是比较稳扎实干、一步步推进的。要在众多电商中成为一支领军队伍,那么,采取一些快速渗透消费者、实效精确的营销策略是非常必要的。 1.体验式营销。第一种,体验健康、食品安全。消费者对于网购食品最看重的就是食品安全问题了,组织消费者亲自去原产地采摘的体验方式肯定是花费巨大且受众范围小,只能限于原产地附近消费者进行体验。但是,顺丰优选可以以模拟情景的方式随时随刻发布原产地的食品生产、加工的正式情况来代替产地参观,让消费者移动鼠标就可以体验到一种绿色环保的生产过程。第二种,体验整个购物流程的后台工作。可以制作一个宣传片,从顾客售前咨询到最后的售后,展示顺丰集团员工为一份份的订单所付出的努力,给消费者一个安心购物的心理体验。第三种,体验顺丰优选的文化。可以从员工开始,欢迎员工家属参加公司的活动,展现公司的核心文化,也是一种可以由员工家属向社会宣传的一种自身体验。 2.口碑营销。树立一个良好的口碑是打造一个良好的品牌形象的必然要素,消费者对于一次糟糕的消费体验往往是忍不住向周围人吐槽,但同样一次感觉良好的消费体验也会不吝推荐给别人。可以创建一个消费者口碑平台,让商家与消费者、消费者与消费者之间进行积极的互动,也起到一个监督商家的作用。需要注意的是,要做好杜绝虚假口碑的工作,让消费者的意见真实的反映出来。另外,顺丰优选可以多做些有正能量的事情,展现一个企业该有的社会责任,比方说某些公益活动、倡导绿色生产、保护环境的志愿活动等,在社会上树立一个好的形象,获得一个好的公众口碑。 3.植入式营销。在这个冠名“中国好声音”、赞助“爸爸去哪儿”、鸡尾酒占据电视剧镜头等等的大时代里,显然,消费者对于植入式营销的接受能力还是可以的饿,只要选对目标客户喜爱的、认可度高的节目,其实是会被接受并且消化的。除此之外,还可以适当地投放网页

基于Libevent的HTTP Server

基于Libevent的HTTP Server 简单的Http Server 使用Libevent内置的http相关接口,可以很容易的构建一个Http Server,一个简单的Http Server如下: #include #include #include #include #include #include int init_win_socket() { WSADATA wsaData; if(WSAStartup(MAKEWORD(2,2) , &wsaData) != 0) { return -1; } return0; } void generic_handler(struct evhttp_request *req, void *arg) { struct evbuffer *buf = evbuffer_new(); if(!buf) { puts("failed to create response buffer \n"); return; } evbuffer_add_printf(buf, "Server Responsed. Requested: %s\n", evhttp_request_get_uri(req)); evhttp_send_reply(req, HTTP_OK, "OK", buf); evbuffer_free(buf); } int main(int argc, char* argv[]) { #ifdef WIN32 init_win_socket();

顺丰嘿客案例研究报告

顺丰嘿客 ——快递大佬能否成功进军社区电商顺丰速运成立于1993年4月,主要经营国际、国内快递及报关、报检、保险等业务,为广大客户提供快速、安全、优质的服务。正是这样一个快递行业的大佬,目前正在紧锣密鼓地进军电商行业。2014年5月,500多家名为“嘿客”的O2O便利店在全国开业,吸引了大量消费者以及行业内部人员的眼球,但是,顺丰嘿客这样一个便利店到底能否像它的快递做的一样如日中天呢?本次个人案例报告中将会具体就顺丰嘿客展开研究。 一、顺丰嘿客具体介绍 嘿客之前传闻店名为为“嘿店”,相差一个字。报道称顺丰杭州祥光负责人解释:“嘿客的名字很拟人化,朗朗上口也容易记。看下图标就能发下‘嘿’字的左边的口偏旁很小,乍一看还真以为是黑客。”互联网思维,有趣与幽默感相结合,况且黑客都是业内精英,体现了顺丰对社区服务的强力整合。 嘿客店内没有满货柜的饮料零食,取而代之的是两台超大寸的选购下单屏幕,以及一排可供手机扫码下单的虚拟商品,食品、服饰、母婴、数码、家电统统都在其中,货架上除了商品照片别无一物,店内装修和两台平板体验电脑则具有苹果体验店的风格。相较于沃尔玛、家乐福等大购物超市以及全家、711等小型便利店,顺丰嘿客除了更加现代化以及高大上之外,更是将顺丰的快递产业与便利店相结合。

二、嘿客的购物方式以及服务项目 (一)无实体商品,扫描二维码下单购物 顾客所要的商品都在店中心摆放的两台平板智能终端机上,顺丰优选网站上的全部商品都在其中。只要用户扫描照片下面的二维码,就可以直接在终端机上下单购买。区别于传统便利店,“嘿客”采取虚拟购物方式,实现零库存。 (二)现金支付订货 店内可以现金支付订货,消费者在店内选好了商品,可以直接付款,这给不熟悉网购、没有网上支付方式的老年人打开了“网购”的大门。 (三)“代预订”服务 店内对非生鲜类商品都可以提供“代预订”服务,用户可以不用提前付款,让门店预定自己心仪的商品,商品送抵后,在店内进行试穿、试用后,如果不满意,可以享受无条件退货服务。 (四)便民服务 除了快递物流业务、虚拟购物外,“嘿客”还具备ATM、冷链物流、团购\预售、试衣间、洗衣、家电维修等多项业务。据了解,不久嘿客中还将增加话费充值、机票预订、水电费缴纳等服务,并承担起“快递自提站点”的功能。 三、嘿客经营模式中的优劣势 (一)优势 1.有效减少库存

深度剖析KMP

深度剖析KMP,让你认识真正的Next KMP算法,想必大家都不陌生,它是求串匹配问题的一个经典算法(当然如果你要理解成放电影的KMP,请退出本页面直接登录各大电影网站,谢谢),我想很多人对它的理解仅限于此,知道KMP能经过预处理然后实现O(N*M)的效率,比brute force(暴力算法)更优秀等等,其实KMP算法中的Next函数,功能十分强大,其能力绝对不仅仅限于模式串匹配,它并不是KMP的附属品,其实它还有更多不为人知的神秘功能^_^ 先来看一个Next函数的典型应用,也就是模式串匹配,这个相信大家都很熟悉了: POJ 3461 Oulipo——很典型的模式串匹配问题,求模式串在目标串中出现的次数。 #include #include #include #include #include using namespace std; #define MAX 1000001 char t[MAX]; char s[MAX]; int next[MAX]; inline void calnext(char s[],int next[]) { int i; int j; int len=strlen(s); next[0]=-1; j=-1; for(i=1;i=0&&s[i]!=s[j+1]) j=next[j]; if(s[j+1]==s[i])//上一个循环可能因为j=-1而不做,此时不能知道s[i]与s[j+1]的关系。故此需要此条件。 j++; next[i]=j; } } int KMP(char t[],char s[]) { int ans=0; int lent=strlen(t); int lens=strlen(s); if(lent

libevent

libevent源码深度剖析一 ——序幕 张亮 1 前言 Libevent是一个轻量级的开源高性能网络库,使用者众多,研究者更甚,相关文章也不少。写这一系列文章的用意在于,一则分享心得;二则对libevent代码和设计思想做系统的、更深层次的分析,写出来,也可供后来者参考。 附带一句:Libevent是用c语言编写的(MS大牛们都偏爱c语言哪),而且几乎是无处不函数指针,学习其源代码也需要相当的c语言基础。 2 Libevent简介 上来当然要先夸奖啦,Libevent 有几个显著的亮点: 事件驱动(event-driven),高性能; 轻量级,专注于网络,不如ACE那么臃肿庞大; 源代码相当精炼、易读; 跨平台,支持Windows、Linux、*BSD和Mac Os; 支持多种I/O多路复用技术,epoll、poll、dev/poll、select和kqueue等; 支持I/O,定时器和信号等事件; 注册事件优先级; Libevent已经被广泛的应用,作为底层的网络库;比如memcached、Vomit、Ny lon、Netchat等等。 Libevent当前的最新稳定版是1.4.13;这也是本文参照的版本。 3 学习的好处 学习libevent有助于提升程序设计功力,除了网络程序设计方面外,Libevent的代码里有很多有用的设计技巧和基础数据结构,比如信息隐藏、函数指针、c语言的多态支持、链表和堆等等,都有助于提升自身的程序功力。 程序设计不止要了解框架,很多细节之处恰恰也是事关整个系统成败的关键。只对libevent 本身的框架大概了解,那或许仅仅是一知半解,不深入代码分析,就难以了解其设计的精巧之处,也就难以为自己所用。 事实上Libevent本身就是一个典型的Reactor模型,理解Reactor模式是理解libevent 的基石;因此下一节将介绍典型的事件驱动设计模式——Reactor模式。 libevent源码深度剖析二 ——Reactor模式

httpsqs源码分析

Httpsqs是一个消息队列服务器,他调用的接口是tokyocabinet,tokyocabinet是一个数据库的持久化库,保存。 Httpsqs1.6 设计到的第3方库: Libevent: 这个不用介绍了 Tokyocabinet:数据库的持久化库 Httpsqs1.6 采用的是单线程通信,通信的采用的是libevent,因为Tokyocabinet的处理速度很快,在业务处理方面不存在阻塞的问题,所以采用单线程。 整体流程: httpsqs_handler 图1 整体流程

httpsqs_handler的处理流程 图 2 上面的处理流程只列出了put,get 2种命令,其实还有其他的命令,处理很put,get差不多 上面2个图,就是httpsqs的大概的流程。 Tokyocabinet 是一个的持久化数据库,怎么能做成队列呢? 下面以一个队列来举例说明: 假如我们要往LogQueue队列插入数据,LogQueue并不是一个Key值,他的Key值是LogQueue:1,LogQueue:2,LogQueue:3 ………….. LogQueue:10000…….,哪这个1,2,3…………….10000是怎么控制的呢,这又设计到另为2个Key值,LogQueue:get, LogQueue:put。具体操作见源码。 上面是httpsqs1.6的大概分析。 目前在项目中遇到的问题: 1往一个队列中插入数据时,插入数据OK,但取数据的时候,数据为空原因:初步认为是调用tcbdbput2失败了,httpsqs1.6在调用这个接口时没有返回 值,httpsqs1.6本身根本就不知道是否保存成功。 根据以上,改了一个httpsqs2.6的版本 1 httpsqs1.6采用的B+树的方式(见Tokyocabinet代码),把httpsqs1.6中所有的tcb

相关文档