Your SlideShare is downloading. ×
Speed up zing me – ntvv2 code with PHP extension module
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Introducing the official SlideShare app

Stunning, full-screen experience for iPhone and Android

Text the download link to your phone

Standard text messaging rates apply

Speed up zing me – ntvv2 code with PHP extension module

67,326
views

Published on


0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
67,326
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
45
Comments
0
Likes
1
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. 18/12/2010Speed up ZingMe-NTVV2 withPHP extension module By Nguyen Trung Thanh ZingMe Team leader Web Technical - VNG
  • 2. ContentsIntroductionWhy?PHP extension basicSWIGSample
  • 3. INTRODUCTION - ntvv2
  • 4. Introduction• Ntvv2 (http://me.zing.vn/apps/ntvv2) – 1.M daily active user – Average 800 rps (per webserver) max 1100 rps – 9300 rps (all database servers) – 3 webservers• Use Membase for cache and storage• Use other db for secondary storage• All bussiness function is moved to PHP extension
  • 5. Why to write PHP module?Make complicated Bussiness functions run faster, consume less memoryPHP high-level overhead cpu/memAdvance facility with PHP-FPM Cache something in PHP processStrictly Confidential – Do Not Distribute
  • 6. PHP extension basicWhat is an extension?LifecycleSetting up a build environmenthttp://devzone.zend.com/article/4486http://devzone.zend.com/article/1021-Extension-Writing-Part-I- Introduction-to-PHP-and-Zend
  • 7. What is an extension?Have you ever used PHP extension?PHP consist of many extensionsAll function we used is from extensions
  • 8. Lifecycle
  • 9. Setting up build environment- Setup PHP-devel- Sample extension
  • 10. Is it complicated?● Is there any sexier and easier way?● We can use SWIG
  • 11. SWIGSWIG is an interface compiler that connects programs written in C and C++ with scripting languages such as PHP, Python, Ruby...How SWIG worksUsing SWIGInstall module to PHP extensionsSampleStrictly Confidential – Do Not Distribute
  • 12. How SWIG works
  • 13. What does SWIG do for you ?NamespaceConstantsType conversion For simple types (int, float, char *, enum)Wraps complex types Pointers to structs and classesExposes functions
  • 14. Using SWIGDefile module in swig fileGenerate source codeCreate module project, build it
  • 15. Define moduleData typeWrapper class/functions %module ntvv2module %{ #include <string> #include <vector> #include <list> #include <string> #include “ntvvgame.h" %} struct LandInfo{ int id; std::string data; } ;Strictly Confidential – Do Not Distribute LandInfo updateLandInfo(int uid, int landID);
  • 16. Exposure•Swig recognizes C/C++ declarationsstruct or classfunctions•Hiding elements%ignore solver::noupdate;%include “satsolver/solver.h”
  • 17. Useful commands•Renaming%rename("to_s") asString();%rename( "name=" ) set_name( const char *name );%rename("empty?") empty();•Aliasing%alias get "[]";•Constants%constant int Script = C_CONSTANT;•Defines%define YUILogComponent "bindings"%enddef%define %macro(PARAMETER)
  • 18. SWIG stepsGenerate codeCreate project, compiling – Add genterated code to projectRunning – Add extension module to PHP
  • 19. SampleCache data in PHP moduleStrictly Confidential – Do Not Distribute
  • 20. Q&A